互聯網充斥着頁面,說我們不應該爲私有方法編寫單元測試用例。但我不確定說我們應該完全忽略單元測試用例的私有方法是否正確?我知道如果我們測試主要的公共方法,他們最終會被測試。但想象一下,我的方法是通過私有方法訪問數據庫並從數據集中填充對象。如果我想爲我的數據庫使用模擬,我將不得不爲這種方法編寫一個單元測試用例,這會迫使我公開它。我如何克服這種情況?單元測試私有方法和使用模擬對象
由於下面是我的公開方法,如果我寫一個單元測試用例,它會每次都碰到數據庫。我想避免這種情況,因爲數據庫是我一直想要模擬的外部依賴項。使用數據庫的另一個問題是假設我正在對單元測試用例中的sysid進行硬編碼,直到系統數據庫存在於db中時才起作用。從db中刪除該記錄時,測試用例變得毫無用處。
public Order RetrieveOrderAndOrderItem()
{
DataSet ordersDS = new DataSet();
Order obj = new Order();
OrdersDb.RetrieveOrders(conKey,companySysId,userSysId,orderId,ordersDS);
obj = populateObjFromDb(ordersDS,orderItemId, orderItemSubType);
return obj;
}
private Order populateObjFromDb(DataSet orders,int orderItemId, int orderItemSubType)
{
Order orderObj = new Order();
orderObj.OrderId = Converters.DBInt(orders.Tables[0].Rows[0]["OrderId"]);
return orderObj;
}
嗯,首先要注意的是,不測試私有方法是好的,禮貌地說,hooey。你測試你需要測試的東西。我的一般方法是將需要測試的方法公開爲'protected',然後創建一個子類來訪問這些方法。 –