單元測試開始,我不知道如何測試我們的老代碼,這看起來就像這樣:單元測試方法具有依賴性(無接口)
public Player DetermineWinner(Player a, Player b)
{
if(a.Age>b.Age)
....
///few more conditions checking properties of both players
}
class Player
{
public Player (DBConnection c, world w, DateTime logTime)
{} //not easy to mock...
}
如何嘲笑呢?我明白,如果Player實現了一個接口,我可以簡單地創建一個模擬並將其傳遞到具有期望值的單元測試中,但這不是這種情況。 Player類使用各種參數實例化,所以我不能在單元測試期間簡單地創建一個實例並傳遞它 - 它取決於各種外部對象。 我需要模擬Player對象並同時設置它的屬性,以便測試是確定性的。開始的最佳方法是什麼?
下次我應該使用接口來解耦嗎?
把類的所有依賴'Player'它使用了一些的外部資源('DbConnection'至少)背後的接口或使他們的方法是虛擬的。然後你可以用「模擬」依賴關係來測試'Player'類。其他方法使用一些「沒有限制」的嘲笑框架,它會爲你做 – Fabio
這裏的*真實*問題不是「如何嘲笑」,而是被測試代碼的非常糟糕的設計。具體而言,'Player'類不應該依賴'DBConnection'。相反,它的構造函數只應該獲取真正屬於某個玩家的數據項,以及在其他地方讀取/寫入玩家數據的數據庫訪問權限。 –
什麼是您的Visual Studio版本? – zaitsman