我有一個Mockito問題。用mockito進行單元測試(部分模擬)
是否有可能做這樣的事情:
ClassX x = mock(ClassX.class)
when(x.methodB()).thenReturn("toto");
String result = x.methodA();
我與1.7的Mockito工作。
我看到有一個「間諜」的系統,但他們說這是不建議在我們測試的項目使用它(爲什麼?)...
反正我試過,間諜功能,但我得到一個奇怪的行爲。
檢查什麼,我想做的事:
真正的代碼:
String methodA(String arg) {
return this.methodB(arg);
}
String methodB(String arg) {
return "toto";
}
測試代碼:
@Test
public void testTest() {
final ClassX x = spy(new ClassX());
final String argument = "arg";
doReturn("good").when(helper).methodB(argument);
assertTrue( x.methodB(argument).equals("good"));
assertTrue( x.methodA(argument).equals("good"));
}
正如他們說我避免了當thenReturn語法,可能是一個問題一個間諜(但它也不管用)
奇怪的是: assertTrue(x.methodB(argument).equals(「good」)); 是好的
只有第二個 assertTrue(x.methodA(argument).equals(「good」)); 也不行
其實helper.methodA(參數)返回「TOTO」 - >真正的結果,而不是模擬結果
這是不可能告訴給的Mockito在這種情況下返回「好」? ??看來當測試類調用methodB沒關係,但如果間諜調用方法B的方法,它不會工作了...
我不知道該怎麼辦...是這樣一個奇怪的要單元測試同一個類的兩個方法,並使測試彼此獨立,這樣一個着名的模擬測試框架不會實現這個基本功能?這不就是我們所說的真正的單元測試嗎?不明白爲什麼他們說要避免使用間諜方法的測試對象...
感謝
剛剛用Mockito 1.9.5試了一下,兩個都返回了''好的'''。所以我想這種行爲已經消失了。 – acdcjunior 2013-08-13 18:50:44