部分的な回避策が見つかりました。私のケースでは、InvocationImpl
インスタンスの大部分が、spy()
を使ってリアルパーシャルモックを作成して1つのメソッドをオーバーライドできる単一のテストケースで作成されていました。私はMockito 1.10.19を使用しているので、部分模擬工事をspy()
からmock(<class>, withSettings().spiedInstance(realInstance).defaultAnswer(CALLS_READ_MATHODS).stubOnly())
に変更しました。
がこの模擬でverify()
の使用を防止しながら、stubOnly()
は、試験中にスパイに行われた各呼に対してInvocationImpl
のインスタンスを格納するからモックを保持し、そして有意ヒープ使用を減少させました。
私のモックは通常、SpringのコンテキストファイルでSpringockitoで作成されているので、次のようにmock()
呼び出しと一致するようにBean定義の醜いリワークが必要でした。しかしこれは、スパイを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>