我試圖測試服務類(負責調用庫層,如果需要做一些操作),基本上,這是我想要測試模擬與我測試的同一類中的方法調用,它真的是代碼味道嗎?
class CarServiceImpl{
public Car findById(String id){
//call repository layer to find a car
}
public void deleteById(String id){
Car car = this.findById(id);
if(car != null){
//Call repository layer to update the car
}else{
Throw NotFOundException();
}
}
}
正如你可以看到我的班調用deleteById方法的findById方法,所以我的問題是。
真的是代碼異味調用同一類的方法嗎?我不認爲我應該創建一個單獨的課程來通過id找到一輛車。
我怎麼能嘲笑的「deleteById」方法調用「findById」,如果我用
Mockito.when(carServiceImpl.findById("car1")).thenReturn(carModel);
它劇照調用該方法,所以我就需要模擬調用程序存儲庫通過ID也發現,即使當我已經測試了findById方法。
把'findById'操作留給'deleteById'的調用者怎麼辦?如果any1傳遞一個不存在的id,倉庫將會拋出一個合適的異常,並且你的'CarServiceImpl'可以在你的應用程序理解的東西中捕獲和轉換(如果需要)這個異常。 – pedromss