[私人小抄] Datetime.Now 單元測試隔離

Datetime.Now 單元測試隔離

參考 C# 單元測試 - 模擬系統時間 DateTime.NowC# 存取修飾詞 - internal

//簡單做
private DateTime? _now;
internal DateTime Now
{
    get { return _now.HasValue ? _now.Value : DateTime.Now; }
    set { _now = value; }
}
//統一用一個靜態物件管理
public static class AppTime
{
    private static Func<DateTime> _now;

    public static DateTime Now
    {
        get
        {
            if (_now == null) Reset();

            return _now();
        }
        internal set
        {
            _now= () => value;
        }
    }

    internal static void Reset()
    {
        _now= () => DateTime.Now;
    }
}

internal 不同專案就無法存取
Properties\AssemblyInfo.cs 新增 
[assembly: InternalsVisibleTo("App.Tests")]
這樣設定可以讓 App.Tests 存取internal

 

如果內容有誤請多鞭策謝謝