单元测试中Mock依赖解耦
单元测试的思路就是我们想在不涉及依赖关系的情况下测试代码。
在单元测试中,我们往往想去独立地去测一个类中的某个方法,但是这个类可不是独立的,它会去调用一些其它类的方法和service,这也就导致了以下两个问题:
- 外部服务可能无法在单元测试的环境中正常工作,因为它们可能需要访问数据库或者调用其它Http服务。
- 我们的测试关注点在于这个类的实现上,外部类的一些行为可能会影响到我们对本类的测试,那也就失去了我们进行单测的意义。
解决方案是将依赖mock掉,也即在测试过程中,对那些不容易构建的对象,用一个虚拟对象来代替测试的情形。
添加依赖
<dependency><groupId>org.mockito</groupId><artifactId>mockito-core</artifactId><version>2.0.111-beta</version></dependency>
被测试的ServiceImpl
/*** 融合事件表 服务实现类** @author BladeX* @since 2021-07-05*/@Servicepublic class MergeEventServiceImpl extends ServiceImpl<MergeEventMapper, MergeEvent> implements IMergeEventService {/*** 获取攻击链** @param startTime 开始时间* @param endTime 结束时间* @param ip 核心ip* @param isSrc 核心ip是否作为源ip* @param depth 探测深度* @return 攻击链节点和攻击链边*/@Overridepublic R<Map<String, Object>> attackChain(String startTime, String endTime, String ip, boolean isSrc, int depth) {// 实现略}}
生成测试类
- 测试包和源码包的关系

- 使用IDEA生成工具生成测试类


填写源包就可以,会在test目录下生成相同的包,记住勾选方法!
class MergeEventServiceImplTest {@Testvoid attackChain() {}}
启动——标注Mock类
@RunWith(MockitoJUnitRunner.class)class MergeEventServiceImplTest {@Testvoid attackChain() {}}
其中RunWihth是JUnit5的注解,MockitoJUnitRunner是Mockito的类
