连续运行的工作线程和Nunit
本文关键字:Nunit 线程 工作 运行 连续 | 更新日期: 2023-09-27 18:18:11
我们有一个处理消息的系统。每条消息都有一个与之相关的过期时间。一个工作线程在后台持续运行,收集那些过期和需要删除的消息。工作线程将这些消息的id发送给下一个服务。
在非单元测试用例中,我们正在创建虚拟消息并检查其状态是否在测试用例结束时设置为过期。但是为了这个,我们必须放上线。在测试用例中休眠,直到工作线程完成它的任务。但是,睡眠也不可靠,因为worker的响应取决于数据库中记录的数量。
使用nunit和c#测试这种场景的策略应该是什么
- 比起真正的数据库,您应该使用模拟对象。因此,记录的数量(实际上是假记录)是可配置的;
- 这个"下一个服务"也应该作为模拟对象表示。除了实际服务的接口外,还应该实现一些用于单元测试的辅助方法。在您的情况下,它可能是一个事件(
OnExpiredMessagesReceived
),通知服务已收到过期消息的id。 - 在测试中使用
ManualResetEvent
等待来自服务的事件被接收。然后,必须将收到的id与期望的id进行比较。