2011-11-02 86 views
0

如何使用NUnit單元測試調度程序,該調度程序可以允許與Outlook調度類似的調度功能?如何使用NUnit單元測試調度程序

調度程序被編程爲每天/每週/每月/每年在特定時間或特定的一週/每月發送消息。

如果我使用硬編碼日期,那麼在某些情況下測試用例會失敗。另外如何測試每月和每年的時間表?

-

拉姆

+1

提供您所提到的問題,否則沒有任何意義和即將關閉的調度器界面 – sll

回答

1

摘要的日期和時間檢查調度到一個單獨的接口。有一個類爲您的實時代碼/環境(使用DateTime或當前使用的任何類型)實現此接口,併爲您的測試環境實現該接口,從而可以加速/更改時間。這樣您就可以快速,即時地測試基於時間的功能。

一個非常簡單的例子,這將取決於你的調度程序有所不同:

public interface IDateTimeProvider 
{ 
    DateTime CurrentDateTime { get; } 
} 

public class DateTimeProvider : IDateTimeProvider 
{ 
    public DateTime CurrentDateTime 
    { 
     get { return DateTime.Now; } 
    } 
} 

public class TestDateTimeProvider : IDateTimeProvider 
{ 
    public DateTime CurrentDateTime { get; set; } 
} 

public class Scheduler 
{ 
    private readonly IDateTimeProvider DateTimeProvider; 

    public Scheduler(IDateTimeProvider provider) 
    { 
     DateTimeProvider = provider; 
    } 
} 
1

在某個時間點你計劃將檢查當前的日期,並會檢查它是否能按原定項目。

如果您確保'檢查當前日期'部分在另一個組件中是分開的,您可以在單元測試中切換此行爲並讓它返回指定的日期。

公共接口IDateTimeManager { 的DateTime GetCurrentDateTime(); }

class ProductionDateTimeManager : IDateTimeManager 
    { 
     public DateTime GetCurrentDateTime() 
     { 
      throw new NotImplementedException(); 
     } 
    } 

    public class Scheduler 
    { 
     public Scheduler(IDateTimeManager dateTimeManager) 
     { 
      this.DateTimeManager = dateTimeManager; 
     } 

     public Scheduler() 
     { 
      this.DateTimeManager = new ProductionDateTimeManager(); 
     } 

     public void Execute() 
     { 
      DateTime current = DateTimeManager.GetCurrentDateTime(); 
     } 

     private IDateTimeManager DateTimeManager { get; set; } 
    } 
相關問題