2011-11-02 78 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; } 
    } 
相关问题