是否有可能加快测试nservicebus超时管理器的过程?

时间:2012-06-11 06:23:56

标签: c# .net unit-testing nunit nservicebus

处理我们的系统使用nservicebus超时每24小时触发一次事件的项目。是否有可能通过单元测试“伪造”24小时,因此测试可以在任何给定时间运行,因此无需等待测试运行前一天?

重写的超时方法如下所示:

public override void Timeout(object state)
{
ExportFileGenerator.GenerateFile(_entryDataStore.GetEntriesOlderThan(DateTime.Now));
RequestUtcTimeout(TimeSpan.FromHours(TimeLeftToDailyJob()), "");
}

2 个答案:

答案 0 :(得分:3)

我在这里写了关于如何做到这一点的博客:

http://www.udidahan.com/2012/02/27/nservicebus-saga-tips/

答案 1 :(得分:1)

您只需通过提取对时间相关服务的依赖性(在您的情况下,这将是TimeLeftToDoDailyJob方法)。

基本上有两种方法可以实现这一目标:

  • 将该方法设为虚拟,并使用该方法准备您的类的可测试版本,返回一些非常小的(不可察觉的)值
  • 将该方法提取到全新的类并将此类的实例作为依赖项注入到您的测试类中(使用构造函数注入进行控制反转)

我会采用第二种方法,因为它通常会导致更多的解耦设计,从而导致代码更简单,从而更容易进行测试。