方法時,但我們也需要開發單元測試。的Mockito:顯示java.lang.NullPointerException調用從嘲笑我使用到的Mockito寫上已與集成測試測試應用一些單元測試
這是測試代碼:
public class TestResourceB {
@Mock
ResourceB b;
@Mock
ResourceC c;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
TestObjects.InitializeObjects();
}
@Test
public void testMethodResourceA() {
when(b.callFuncA()).thenCallRealMethod();
when(b.callFuncB()).thenReturn(TestObjects.mockedListA);
when(b.callFuncC((B)anyVararg())).thenCallRealMethod();
when(c.callFuncB()).thenReturn(TestObjects.mockedListB);
when(c.callFuncA()).thenCallRealMethod
String output = b.callFuncA();
}
}
這是類ResourceB
public class ResourceB {
ResourceC c = new ResourceC();
public String callFuncA(){
/*Calling callFuncB and doing some other stuff*/
String test = callFuncC(arg1);
}
public List<A> callFuncB() {
/*returns the mocked list A*/
}
public String callFuncC(B arg1) {
String test2 = c.callFuncA(); // It crashes here
/*doing some other stuff*/
}
}
這是類ResourceC
public class ResourceC {
public String callFuncA() {
/*Calling callFuncB and doing some other stuff*/
return testString;
}
public List<B> callFuncB() {
/*return a List*/
}
}
,我有是問題在類ResourceB中的方法callFuncC中當行
String test2 = c.callFuncA();
叫我得到一個NullPointerException
任何想法,這可能是爲什麼發生?
,我嘲笑ResourceB類的原因是,我需要模擬一個數據庫的交互,其發生內部callFuncB()在ResourceB。 是否有可能嘲笑這個函數的結果沒有嘲諷類ResourceB? – SteveSt
@Stefanos我強烈建議你不要這樣做。在mockito中,我們有'間諜',但他們是非常特殊的情況。大多數時間間諜導致代碼沒有正確測試,這可能導致錯誤的安全感。如果你想用數據庫測試一些東西,你應該寫一個**集成測試**,它應該連接真實的數據庫,或者至少像H2這樣的東西。即使使用嵌入式數據庫也存在風險,因爲您無法真正依賴它的實現來模擬數據庫。 – Brice
非常感謝您的建議:) – SteveSt