【问题标题】:Mockito InvocationImpl retained across TestSuite testsMockito InvocationImpl 在 TestSuite 测试中保留
【发布时间】:2016-07-25 17:09:11
【问题描述】:

我有一个包含大约 800 个测试的 JUnit 测试套件。其中大部分都与 Spring 连接,并且大量使用 Mockito 来模拟/监视行为。我开始遇到内存不足的错误。在分析 hprof 转储时,我注意到 > 30% 的堆被 Mockito InvocationImpls 消耗,它们在测试之间保留。

在测试类完成后有什么方法可以清除这些吗?我不想使用 Mockito.reset( mock ) 因为模拟初始化因每个测试而异。如果没有,看来我需要拆分测试以适应泄漏。

this link 看来,Mockito 团队认为保留这些是作为执行后验证方法的权衡。但我想知道是否有人找到了一种方法来清除这些,以便可以将大量单元测试串联在一个套件中。

【问题讨论】:

    标签: java memory-leaks mockito


    【解决方案1】:

    我找到了部分解决方法。在我的例子中,绝大多数InvocationImpl 实例是在一个使用spy() 创建Real Partial Mock 的测试用例中创建的,因此可以覆盖一种方法。我使用的是 Mockito 1.10.19,所以我将部分模拟构造从 spy() 切换到 mock( <class>, withSettings().spiedInstance( realInstance ).defaultAnswer( CALLS_READ_MATHODS ).stubOnly() )

    虽然这会阻止在此模拟上使用verify(),但stubOnly() 会阻止模拟在测试期间对间谍的每次调用存储InvocationImpl 的实例,并显着减少堆使用。

    由于我的 Mocks 通常是在 Spring 上下文文件中使用 Springockito 创建的,因此我需要对 bean 定义进行丑陋的修改以匹配 mock() 调用,如下所示。但这允许在 Spring 连接的域类中使用 spy。

      <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>
    

    【讨论】:

      猜你喜欢
      • 2018-10-31
      • 2015-05-10
      • 1970-01-01
      • 2011-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      相关资源
      最近更新 更多