java – Mockito InvocationImpl在TestSuite测试中保留
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – Mockito InvocationImpl在TestSuite测试中保留,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1884字,纯文字阅读大概需要3分钟。
内容图文
我有一个JUnit测试套件,有大约800个测试.其中大部分都与Spring有关,而且大量使用Mockito进行模拟/间谍行为.我开始遇到内存不足错误.在分析hprof转储时,我注意到>在测试之间保留的Mockito InvocationImpls消耗了30%的堆.
在测试课完成后有没有办法清除这些?我不想使用Mockito.reset(mock),因为模拟初始化因每次测试而异.如果没有,似乎我需要拆分测试以适应泄漏.
从this link开始,Mockito团队认识到这些是在执行方法之后作为验证的权衡.但我想知道是否有人找到了清除这些的方法,因此大量的单元测试可以在套件中串联起来.
解决方法:
我找到了部分工作.在我的例子中,绝大多数InvocationImpl实例是在一个使用spy()创建Real Partial Mock的测试用例中创建的,因此可以覆盖一个方法.我正在使用Mockito 1.10.19,所以我将部分模拟构造从spy()切换到mock(< class>,withSettings().spiedInstance(realInstance).defaultAnswer(CALLS_READ_MATHODS).stubOnly()).
虽然这可以防止在这个模拟上使用verify(),但是stubOnly()使模拟在测试期间对spy的每个调用都存储了InvocationImpl的实例,并且显着减少了堆的使用.
由于我的Mocks通常在Spring上下文文件中使用Springockito创建,因此我需要对bean定义进行丑陋的返工以匹配mock()调用,如下所示.但这允许间谍在Spring-wired域类中使用.
<bean id="realInstance" class="<Real Instance Class>" />
<bean id="instSpySettings" class="org.mockito.Mockito" factory-method="withSettings" />
<bean id="instSpyPartialMock" factory-bean="instSpySettings" factory-method="spiedInstance">
<constructor-arg>
<ref local="realInstance" />
</constructor-arg>
</bean>
<bean id="instSpyDefaultAnswers" factory-bean="instSpyPartialMock" factory-method="defaultAnswer">
<constructor-arg><util:constant static-field="org.mockito.Mockito.CALLS_REAL_METHODS"/></constructor-arg>
</bean>
<bean id="instSpyStubOnly" factory-bean="instSpyDefaultAnswers" factory-method="stubOnly" />
<bean id="spyInstance" class="org.mockito.Mockito" factory-method="mock">
<constructor-arg value="<Real Instance Class>" />
<constructor-arg>
<ref local="instSpyStubOnly" />
</constructor-arg>
</bean>
内容总结
以上是互联网集市为您收集整理的java – Mockito InvocationImpl在TestSuite测试中保留全部内容,希望文章能够帮你解决java – Mockito InvocationImpl在TestSuite测试中保留所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。