连续运行的工作者线程和Nunit

时间:2011-12-19 11:14:28

标签: c# unit-testing nunit

我们有一个处理消息的系统。每条消息都有一个与之关联的到期时间。工作线程在后台持续运行,并收集过期且需要删除的消息。工作线程将此类消息的ID发送到下一个服务。

在nunit测试用例中,我们正在创建虚拟消息,并在测试用例结束时检查其状态是否设置为过期。但为此我们必须将thread.sleep放在测试用例中,等待工作线程完成其任务。但是,睡眠也不可靠,因为来自worker的respose取决于数据库中的记录数。

使用nunit和C#测试此类场景的策略应该是什么。

1 个答案:

答案 0 :(得分:1)

  1. 您应该使用模拟对象而不是真正的数据库。因此,记录的数量(实际上是伪记录)是可配置的;
  2. 这个“下一个服务”也应该作为模拟对象呈现。除了实际服务的接口外,还应该为单元测试实现一些辅助方法。在您的情况下,它可能是一个事件(OnExpiredMessagesReceived),它通知该服务已收到过期消息的ID。
  3. 在测试中使用ManualResetEvent等待,直到收到来自服务的事件。然后,您必须将收到的ID与预期的ID进行比较。