当前位置: 首页 > 知识库问答 >
问题:

在TestSuite测试中保留Mockito调用impl

蓝鸿哲
2023-03-14

我有一个JUnit测试套件,有大约800个测试。其中大部分都与Spring连接,大量使用Mockito来模拟/监视行为。我开始遇到内存不足的错误。在分析hprof转储时,我注意到

在测试类完成后,是否有办法清除这些内容?我不想使用Mockito。重置(模拟),因为模拟初始化随每个测试而变化。如果没有,我似乎需要将测试分开以适应泄漏。

从这个链接来看,Mockito团队似乎认识到这些是作为执行后验证方法的权衡而保留的。但是我想知道是否有人已经找到了清除这些的方法,这样大量的单元测试就可以在一个套件中串在一起。

共有1个答案

阎丰
2023-03-14

我找到了一份局部工作。在我的例子中,绝大多数的InvocationImpl实例都是在一个测试用例中创建的,该测试用例使用spy()创建一个真正的部分模拟,因此可以覆盖一个方法。我使用的是Mockito1.10。19,所以我将部分模拟结构从spy()切换到mock(

虽然这可以防止在这个mock上使用验证(),但是斯图尔只有()可以防止mock为测试期间对间谍的每次调用存储InvocationImpl的实例,并显著减少堆的使用。

由于我的mock通常是在Spring上下文文件中使用Springockito创建的,因此我需要对bean定义进行一次难看的修改,以匹配mock()调用,如下所示。但这允许spy在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>

 类似资料:
  • 我正在用Mockito为一个项目设置jUnit测试。在被测系统(DrawingService)中调用方法时遇到问题。模拟包括图形和IDrawingRepository。 我不熟悉TDD、单元测试和一般的模拟,所以我可能犯了一些noob错误?任何帮助都将不胜感激。 以下是测试课程: 以下是正在测试的系统:

  • 我正在尝试测试,只有在调用case的情况下,否则不会调用该方法。 但这会调用我的,并在内抛出空指针。因为我的行为不会调用,所以我如何在不调用的情况下测试它。

  • 我认为自己是单元测试的新手,对McCito和JUnit完全陌生。我必须为一些简单的api调用编写单元测试。但我的测试对我来说似乎有点毫无意义,我不知道我哪里出了问题。我向现有的web服务ManagerWS添加了一个方法。java,见下文。 经理。java方法: 逻辑很简单。构造url,创建标头并将标头添加到请求中。发出请求并从响应中提取状态代码。这是我的测试。注意:类使用@RunAnd(Sprin

  • 问题内容: 我有一个旧类,其中包含用于实例化LoginContext()的new()调用: 我想使用Mockito测试类来模拟LoginContext,因为它要求在实例化之前设置JAAS安全性,但是我不确定如何在不更改login()方法以外部化LoginContext的情况下进行此操作。是否可以使用Mockito模拟LoginContext类? 问题答案: 对于将来,我会推荐伊兰·哈雷尔(Eran

  • 我试图验证一个模拟的方法()被调用了2次。不管出于什么原因,Mockito从来没有失败过测试,不管期望调用的次数是多少。我是这样使用它的:

  • 我有下面一个班的方法。 使用mockito的junit测试用例将提供100%的代码覆盖率。