我想在方法運行一些單元測試,下面我傳遞一個嘲笑接口(vehicleObject)到ProcessVehicles但只要它是通過由DetermineVehicleType它被重新分配,所以我的嘲笑對象是無使用。我的第一個想法是創建一個布爾值,以確定是否應該運行DetermineVehicleType並將其添加爲參數,但聽起來非常混亂。有沒有更好的方法來解決這個問題?有沒有更好的方法來測試這種方法?
與模仿對象方法注入:
public void ProcessVehicles(ICarObject CarObject)
{
IObject vehicleObject = DetermineVehicleType(carObject);
vehicleObject.ProcessVehicle(carObject);
}
原始代碼:
public void ProcessVehicles()
{
IObject vehicleObject = DetermineVehicleType(carObject);
vehicleObject.ProcessVehicle(carObject);
}
注:我無法檢查vehicleObject調用DetermineVehicleType,因爲它可能不是空之前是空當班級被實際使用時。從長遠來看,也許總重構是答案,在這一點上,這不是我正在尋找的答案,也許沒有其他選擇。
方法DetermineVehicleType是私人
注:我知道有代碼異味,這是遺留代碼,目前的工作。我想得到它的測試不會改變它,所以它看起來很漂亮,然後停止生產。總重構可能是我唯一想確定模擬工具沒有另一個解決方案的唯一選擇。
如果你模擬vehicleObject,你想測試什麼?如果ProcessVehicle被調用或什麼的? – 2012-03-21 19:27:18
您能否詳細解釋ProcessVehicles方法的目標是什麼?我覺得這裏的代碼味道不好。通過將一個對象傳遞給一個函數並用一個以carObject作爲參數的函數改變它的引用。 – daryal 2012-03-21 19:28:02
@WouterdeKort我想獲得測試方法ProcessVehicles – 2012-03-21 19:28:49