我有一個程序集有一個公共方法。我想爲這種方法寫一個單元測試。 要創建此類的實例,將調用默認的構造函數。我無法改變這一點。 所有此方法都會檢查傳入該方法的對象,並根據值更新數據庫中的表。 對於單元測試,我想驗證數據庫調用已經完成。 我想嘲笑數據庫。這樣做的最好方法是什麼? 到目前爲止,我已經添加了一個IRepository類型的屬性。 在該方法中,如果這是空的,我創建一個Repository實例。我的想法是,在單元測試中,我將把這個屬性設置爲Mocked Repository。這聽起來不錯嗎?單元測試和嘲笑分號
public IRepository DatabaseInstance { get; set; }
public void Process(ObjectContext context)
{
if (DatabaseInstance == null)
DatabaseInstance = new UpdateRepository();
// Depending on value in context, set up values of sprocToCall and listOfParameters
//Eventually call UpdateTable
DatabaseInstance.UpdateTable(sprocToCall, listOfParameters);
}
測試數據庫是一個集成測試,而不是單元測試。但是,如果你嘲笑數據庫,那麼你一點都沒有測試,這是毫無意義的。除非你在Process()中有業務邏輯,否則我不打擾。 – Crowcoder
有一些商業邏輯..在取決於對象的上下文的值不同的表在數據庫中更新。 – Fiona
您聲明您的目標是驗證數據庫調用是否已完成,但您將如何通過模擬來做到這一點?如果您正在測試獨立於數據訪問的業務邏輯,那麼模擬數據是絕對合適的。你可能需要設置依賴注入(用於交換界面),或者你需要將你的數據訪問分割成一個新的虛擬方法,可以用[Moq](https://github.com/Moq)/moq4 /維基/快速開始)。 – Crowcoder