hzdavid / jmockit.cn

JMockit中文网(jmockit.cn)上所有讲述的测试示例源代码
36 stars 15 forks source link

请问一下,jmockit测试spring项目的时候如何能避免加载所有的bean #10

Open roadriman opened 5 years ago

roadriman commented 5 years ago

项目比较大,每次用原生的junit测试启动就需要大量时间,强大的jmockit是否能避免这个问题呢,只加载测试需要的bean

hzdavid commented 5 years ago

可以,之所以你现在的测试启动时间很长,是因为spring容器启动耗时长。 JMockit的@Injectable @Tested,来达到类似spring容器依赖注入的效果。

JMockit的@Injectable @Tested的使用方法见: http://www.jmockit.cn/showArticle.htm?channel=2&id=6

hzdavid commented 5 years ago

你需要把待测试的bean 用@Tested来修饰, 它依赖的Bean用@Injectable来修饰。

不过这样是有个缺陷,如果依赖的Bean又依赖了别的Bean,这个依赖链很长的话,就有点麻烦了。

roadriman commented 5 years ago

谢谢作者大大回复我,我有两点疑问 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错误,

hzdavid commented 5 years ago

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