[英]Mockito - configure a mock so it will call a method with an injected parameter
我在一個類ConsoleHandler
有一個方法,我正在監視該方法的一個實例:
setIndexManager( IndexManager im );
我想說的是“當您調用此方法時,請不要使用您要使用的參數來調用它,而應使用這樣的參數來調用它”(即模擬對象)。
我嘗試這樣做:
doAnswer( new Answer<Void>(){
@Override
public Void answer(InvocationOnMock invocation) throws Throwable {
((ConsoleHandler)invocation.getMock()).setIndexManager( newMockIM );
return null;
}}).when( spyCH ).setIndexManager( any( IndexManager.class ));
不幸的是,這導致了無限循環
然后我想:好吧,如果您可以在when
子句中指定任何IndexManager parameter
都應該觸發此操作, mockIM
除外 ,也許您可以停止該無限遞歸:
doAnswer( new Answer<Void>(){
@Override
public Void answer(InvocationOnMock invocation) throws Throwable {
((ConsoleHandler)invocation.getMock()).setIndexManager( newMockIM );
return null;
}}).when( spyCH ).setIndexManager( not( newMockIM ));
...但not
如此...
有什么辦法嗎? 我仔細檢查了可能出現的類似問題,但找不到任何東西。
當然。 更改存根,以便僅在提供的參數不是您的模擬內容時才起作用。
所以最后一行是
}}).when(spyCH).setIndexManager(AdditionalMatchers.not( ArgumentMatchers.eq(newMockIM)) );
這樣,您“ Answer
的呼叫將不會重新觸發存根呼叫。
注意
在您添加問題的下半部分之前,我已經回答了,但是我相信這是可以的。 參數not
必須是一個匹配器,但是您已經提供了一個值。 因此,您所缺少的只是eq
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.