最近手上的專案認真想透過TDD來開發,上完91的課已經是3個月前了。
翻開「單元測試的藝術」這本書,以下稱此書。
記錄一下。
此書的第7.5小節,在說明關於注入橫切關注點。
在單元測試中,測試應該要擁有可靠且可重覆執行的特性。
假設,我們有個Function是判斷今天是星期幾(DateTime.Now.DayOfWeek),而返回不同的文字。
我們的測試代碼寫了星期一到星期日不同的判斷。
結果是,七個測試代碼(星期一到日),每次執行只會有一個成功六個失敗。
這樣的測試代碼就失去了意義。
此書7.5節,提出一個解決方法。
自己再創建一個類別,SystemTime。代碼如下:
public class SysteTime
{
private static DateTime? _date;
public static void Set(DateTime? date)
{
_date = date;
}
public static DateTime Now
{
get
{
if (_date.HasValue)
return _date.Value;
else
return DateTime.Now;
}
}
}
我有調整過,但原理跟書內一樣。
Production程式碼針對取得今天日期一律改為透過SystemTime.Now取得。
測試代碼在取得SystemTime.Now之前先呼叫SystemTime.Set()方法。
如此,日期變的可操作。