Junit下使用Mock进行单元测试的注意点(待补充)
编写测试方法前
不要使用@Autowired注入待测试类,使用@InjectMocks。
- @Autowired会启动Spring,导致单元测试运行速度变慢。
- 如果待测试类中有读配置文件的全局变量,@Autowired会自动读配置,可能在环境上造成问题。
@MockBean所有依赖
- 即@MockBean在被测试类中用@Autowired注入的变量。
编写测试方法时
注意所有能调用的方法都是已MockBean的方法
- 注意Mock与MockBean的区别,Mock不会调用内部的方法,等同于Mockito.mock()。MockBean与InjeckMocks作用类似,注入对应类。
- 在配置类中定义的变量要Mock使用,尽量不用@value直接从配置文件读。
@value变量用反射Mock
- 单元测试中对待测试类里用@value的变量采取反射方法Mock
数据一致性造成的问题
- 单元测试中能用Mockito.any()的时候尽量用any(),避免数据一致性造成的问题。
点击查看代码
ReflectionTestUtils.setField(this, "name","content");
对void方法进行单元测试
- 在本类中其他地方有调用该void方法时,从调用处下手测试。
- 在本类中无调用,考虑新建实例后使用Mockito.verify()测试,或直接在测试中调用该方法。
编码后
修改待测试类业务代码后同步修改单元测试