比方說,我有如下的界面我想嘲笑:如何處理模擬對象中的差異?
Searcher.java
public interface Searcher {
public String search();
public void someMethod();
}
我該怎麼辦時,我想使用不同的模擬實現這個接口?例如,在一個測試中,我想讓search()
方法返回空字符串,在另一個測試中,我希望它開始執行一些HTTP請求等。
我是否封裝了行爲,如fx。該接口將它放在一個SearchBehaviour接口,然後編寫實現:
public class SearcherMock implements Searcher {
private SearchBehaviour searchBehaviour;
public SearcherMock(SearchBehaviour searchBehaviour) {
this.searchBehaviour = searchBehaviour;
}
@Override
public String search() {
return searchBehaviour.search();
}
@Override
public void someMethod() {
// Do something here
}
}
還是我創建一個新的模擬類爲每個模擬實現,重孰輕? FX。 EmptySearcher
和HTTPSearcher
?
單元測試的HTTP請求?聽起來很腥,因爲你的界面(不會拋出任何異常;如果請求失敗怎麼辦?) – fge
不要說HTTP部分,它只是用來說明變化 –
我不認爲你想這樣做;真正的模擬不會運行復雜的代碼。你會讓它返回你想要的值,以便可以測試該模擬的_users_。也就是說,用mockito你可以在搜索時搜索(search)搜索(),然後返回(「某事」); – fge