Open roadriman opened 5 years ago
可以,之所以你现在的测试启动时间很长,是因为spring容器启动耗时长。 JMockit的@Injectable @Tested,来达到类似spring容器依赖注入的效果。
JMockit的@Injectable @Tested的使用方法见: http://www.jmockit.cn/showArticle.htm?channel=2&id=6
你需要把待测试的bean 用@Tested来修饰, 它依赖的Bean用@Injectable来修饰。
不过这样是有个缺陷,如果依赖的Bean又依赖了别的Bean,这个依赖链很长的话,就有点麻烦了。
谢谢作者大大回复我,我有两点疑问 1。我的测试类如果不使用@Autowired注解来生成,而使用@tested或者@Injectable,那就会变成null,也就是注入失败。一旦使用@Autowired那就需要启动整个容器,我现在是在用 new Expectations(XXXUtils.class) { XXXUtils xxxutils = new XXXUtils(); { xxxutils.get(); result="1”; } } 这种方法打桩的,因为没办法使用这一系列注解,是我配置错了吗? 2。jmockit似乎无法对mybatis的接口dao类进行打桩,会报Invalid type for partial mocking错误,
1, @Tested @Injection 适用于依赖关系比较简单的那种, @Tested修饰要待测试的类, @Injection 修饰待测试的类的依赖类。 如果依赖关系很复杂(如spring管理的依赖关系复杂的各种bean),不太适合
2, mybatis的dao接口,可以打桩的
要用@Capturing 修饰 mybatis的dao接口,
http://www.jmockit.cn/showArticle.htm?channel=2&id=7
用MockUp也可以, http://www.jmockit.cn/showArticle.htm?channel=4&id=17
项目比较大,每次用原生的junit测试启动就需要大量时间,强大的jmockit是否能避免这个问题呢,只加载测试需要的bean