如何使用NUnit單元測試調度程序,該調度程序可以允許與Outlook調度類似的調度功能?如何使用NUnit單元測試調度程序
調度程序被編程爲每天/每週/每月/每年在特定時間或特定的一週/每月發送消息。
如果我使用硬編碼日期,那麼在某些情況下測試用例會失敗。另外如何測試每月和每年的時間表?
-
拉姆
如何使用NUnit單元測試調度程序,該調度程序可以允許與Outlook調度類似的調度功能?如何使用NUnit單元測試調度程序
調度程序被編程爲每天/每週/每月/每年在特定時間或特定的一週/每月發送消息。
如果我使用硬編碼日期,那麼在某些情況下測試用例會失敗。另外如何測試每月和每年的時間表?
-
拉姆
摘要的日期和時間檢查調度到一個單獨的接口。有一個類爲您的實時代碼/環境(使用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;
}
}
在某個時間點你計劃將檢查當前的日期,並會檢查它是否能按原定項目。
如果您確保'檢查當前日期'部分在另一個組件中是分開的,您可以在單元測試中切換此行爲並讓它返回指定的日期。
公共接口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; }
}
可以使用工具樣痣處理DateTime.Now http://angler.wordpress.com/2010/01/21/pex-and-moles-untestable-code-not-really/
提供您所提到的問題,否則沒有任何意義和即將關閉的調度器界面 – sll