java mockito中文 - Mockito可以在不考慮參數的情況下存根方法嗎?




mockito教學 junit (4)

我正在嘗試使用Mockito測試一些遺留代碼。

我想要將生產中使用的FooDao存根如下:

foo = fooDao.getBar(new Bazoo());

我可以寫:

when(fooDao.getBar(new Bazoo())).thenReturn(myFoo);

但顯而易見的問題是, getBar()永遠不會與我為該方法存儲的相同Bazoo對象調用。 (詛咒new操作員!)

我會喜歡它,如果我可以存儲方法存儲的方式,它返回myFoo無論參數。 否則,我會聽取其他解決方法建議,但我真的很想避免更改生產代碼,直到有合理的測試覆蓋率。


Answers

when(
  fooDao.getBar(
    any(Bazoo.class)
  )
).thenReturn(myFoo);

或(避免null ):

when(
  fooDao.getBar(
    (Bazoo)notNull()
  )
).thenReturn(myFoo);

不要忘記導入匹配器(許多其他可用):

對於Mockito 2.1.0及更新版本:

import static org.mockito.ArgumentMatcher.*;

對於舊版本:

import static org.mockito.Matchers.*;


像這樣使用:

when(
  fooDao.getBar(
    Matchers.<Bazoo>any()
  )
).thenReturn(myFoo);

在你需要導入Mockito.Matchers之前


我認為你的問題是由於你的測試結構。 我發現很難將嘲諷與在測試類中實現接口的傳統方法混淆(正如您在此處所做的那樣)。

如果您將偵聽器實現為模擬,則可以驗證交互。

Listener listener = mock(Listener.class);
w.addListener(listener);
world.doAction(..);
verify(listener).doAction();

這應該讓你滿意,'世界'正在做正確的事情。





java unit-testing mocking mockito