這不是我的代碼看起來像,但它會接近我想作爲一個例子改變私有方法的行爲進行單元測試
class Phone {
public makeCall(String number) {
addEntryToCallLog(number)
//eventually make a call
}
private void addEntryToCallLog(String number) {
//make database calls
}
}
class PhoneTest {
Phone phone
@Test
public void canMakeACall() {
//mock the behaviour of phone.addEntryToCallLog to prevent database exceptions
phone.makeCall("1223");
//Assert somehow that call was made << --IGNORE this NOT IMPORTANT
}
}
我想在一個單元測試來測試「MakeCall函數」 ,但是當我這樣做時,代碼會拋出一些數據庫異常,從而打破我的測試。 我認爲能夠測試java私有方法的行爲是合理的,因爲這可以爲所有測試提供一致的行爲。
我以前用過groovy,用它可以用spock來模擬私有方法的行爲。我也可以使用metaClass來爲我創建的實例做同樣的事情。但在java中,這似乎並不是一個簡單的方法。
我也試過mockito和power mockito,但它們允許我改變私有方法的返回值,但它們不允許我改變行爲。
這似乎是一個明顯的事情,有人在那裏處理過。我想我錯過了一些東西。但它是什麼。
默認情況下,Mockito模擬調用除了返回指定的值外根本沒有任何行爲。這應該做你想做的事情,因爲不會進行數據庫調用。 –