PowerMockRunner无法重用spring的TestContext,慎重使用

本来使用powermockrunner,然后代理spring的runner:

@RunWith(PowerMockRunner.class)
@PowerMockRunnerDelegate(SpringJUnit4ClassRunner.class)

觉得测试spring环境的配置基本都搞定了,可以放心开发了。之前还写过powermock和springtest集成测试dubbo的文章。

但是前几天整体运行测试用例,主要的一个工程,包含800多个用例,大概将近200个用例是使用上面的方式来运行的。但是速度太慢了,主要原因是每个集成了powermock+spring环境的测试类,都需要启动spring环境,耗费了大量时间。用i5+8g内存的笔记本根本就运行不完,越运行越慢,大概运行1个小时后,内存涨到5G多,最后崩溃:jvmcrashed。使用i7+16G内存的笔记本,运行大概25分钟还多。

  在网上查询了很多文档,并且看了spring关于测试的文档上面说使用了相同的配置注解,spring就会重用上个TestContext,但我自己的明显不行。查到最后发现,使用 @RunWith(PowerMockRunner.class) 注解的类,这种方式是不能重用TestContext的。PowerMock代理了大多数类,ClassLoader和标准运行的方式不同,所以不行。还在github上看到了以下文章:

https://github.com/powermock/powermock/issues/800

最后只能放弃了。目前使用的方式是主要使用SpringJUnit4ClassRunner,尽量少使用PowerMockRunner。其实大多数也用不到这个PowerMockRunner。使用spring的runner,一样可以用PowerMock打桩,只不过它的增强特性,比如:mock私有,静态,构造这些功能没法用了。如果需要大量这种私有、静态、和构造方法的Mock,那真要考虑设计是否有问题了。只有在使用外部提供类或系统类的时候,采用PowerMockRunner。

    最后,修改了Runner后,I5_8G的机器运行这些用例,用时在8分钟以内,大概可以接受了吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值