mockito有可能根據模擬是否實際用於被測單元來驗證模擬方法是否被調用?Mockito有工廠條件驗證
對於一個簡單的例子,我提供了一個模擬工廠(FooFactory)給我的被測單元,當調用Foo.create()時,它返回一個模擬(Foo),供某些方法在單元被測。我如何驗證Foo.method()僅在被測單元調用Foo.create()時才被調用?
我預想的代碼會是這個樣子:
@Before
public void init() {
Foo mockFoo = mock(Foo.class);
when(fooFactory.create()).thenReturn(mockFoo);
test = new UnitUnderTest(fooFactory);
}
@Test
... may or may not create a foo ...
@After
public void cleanup() {
if (verify(fooFactory).create()) { // Here's the 'conditional verification'
Foo mockFoo = fooFactory.create();
verify(mockFoo).close();
}
}
對於一個小更具體的例子,我的工廠返回,我要確保關閉Reader對象,而不是在每一個方法該類實際上構造了一個Reader。我明顯可以將驗證添加到每個我知道需要讀取器的測試中,但這看起來像是很多重複的工作。
+1。您可以爲這兩種情況創建單獨的單元測試(例如,testWasInteraction,testNoInteraction),並且在清理方法中沒有任何其他驗證。底線 - 如果你想要這個驗證,寫出特定的單元測試。最後,如果會出現一個bug,你會希望看到一個測試失敗,而不是每個測試用例使用這種方法的多個失敗。 – 2010-12-10 00:07:37