在编写自己模块的单元测试的时候,依赖了其他模块的service
或者其他bean
,这时需要做mock,但是mockito
或者powermockito
对于我的需求来说又过于臃肿,而且我也不需要太过复杂的mock语法,所以就撸了这个小框架,只需要写一个Mock
类来代替需要的bean
就好了。
详细用法可以查看github上的测试用例
当前版本: 1.0.2
<!-- https://mvnrepository.com/artifact/com.ouyanglol/spring-help-mock-starter -->
<dependency>
<groupId>com.ouyanglol</groupId>
<artifactId>spring-help-mock-starter</artifactId>
<version>1.0.2</version>
</dependency>
mock.help.packageRoot=com.xxx.xxx
mock.help.packageRoot
配置当前所有测试代码的包路径,虽然不是必须的,当时建议配置,不然会扫描所有包下的文件(包括其他maven的包),非常耗时。mock.help.packageRoot
也不用太过精确,一般建议配置项目启动类的包路径就行了。
在启动类,或者Config类上加上@EnableMock
表示启用mock
类,不然mock
不会生效。
mock的原理,是在spring容器,注入bean的时候,用另外一个实例代替它。那么Mock类也不能是任意的class。原则上需要是原本bean
的子类或者和bean
实现的同一个接口。
比如原本的bean:
@Slf4j
@Service
public class TestServiceImpl implements TestService {
@Override
public void test() {
log.info("test");
}
}
mock类:
@Slf4j
public class TestServiceMock implements TestService {
@Override
public void test() {
log.info("test Mock");
}
}
在正常逻辑的代码之上,只需要加个注解就行了:
@HelpMockBean(beanClass = TestServiceMock.class)
private TestService mock;
beanClass
代表你使用的mock类,TestService
就是需要被mock的bean
。就这么简单,一看就懂了。