2011-12-19 56 views
0

我们有一个处理消息的系统。每封邮件都有与其相关的到期时间。工作线程在后台连续运行,并收集那些已过期并需要删除的消息。工作线程将这些消息的标识发送到下一个服务。连续运行工作者线程和Nunit

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

应该使用nunit和C#来测试这种场景的策略是什么?

回答

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