我們如何替換存根void方法的方法體? 事情是這樣的:在mockito中添加虛空方法帶有副作用
interface Foo {
void foo(Integer j);
}
(...)
Foo mockFoo = mock(Foo.class);
Answer<Void> ans = invocation -> {
Object[] args = invocation.getArguments();
System.out.println("called with arguments: " + Arrays.toString(args));
return null;
};
when(mockFoo.foo(any())).thenAnswer(ans);
(...)
mockFoo.foo(5) // Should print out "called with arguments: [5]"
它能夠對參數進行訪問,並能夠執行使用這些參數的一些代碼是很重要的。
我們試圖doAnswer(ans).when(mockFoo).foo(any());
,但似乎建立模擬何時執行ANS拉姆達幾次的身體,併爲.when(mockFoo)
和.foo(any())
調用之間一些奇怪的原因,重置我們mockFoo變量設置爲「零」。
那麼有效:
Foo mockFoo = mock(Foo.class)
// mockFoo is an instance of a Foo$MockitoMock
Foo o = doAnswer(ans).when(mockFoo);
// mockFoo just became null at this point..?!
o.foo(any());
附:我們使用VertxUnitRunner來運行測試,但問題仍然存在於MockitoJUnitRunner中。
感謝, 阿科什Vandra
請參閱http://stackoverflow.com/questions/2276271/how-to-make-mock-to-void-methods-with-mockito – pringi
你有什麼是正確的,並且肯定沒有理由說'mockFoo'應該永遠重置。您可以向我們展示實際的測試機構設置,而不是您發佈的代碼段?我有一種感覺,你的問題在那裏,而不是你發佈的代碼。 –
@JeffBowman你是對的。在我的實際測試中,我提供了任何()作爲int的參數,這似乎是原因。用anyInt()替換它解決了這個問題。 –