如何对长时间运行的函数调用进行单元测试?

时间:2015-03-23 19:14:20

标签: c# .net unit-testing nunit

所以我有一节课,我打电话给MessageEngine。这个MessageEngine将有一个名为StartEngine的公共函数。每隔X秒,引擎将轮询服务器A,转换结果,并发布到服务器B.我有服务器A和服务器B接口的模拟,这样我就可以隔离地测试MessageEngine 。但是,StartEngine调用永远不会终止;这个想法是它永远存在。如何在单元测试中最好地捕获它(使用NUnit,如果重要)?我不想暴露MessageEngine的内部,只是为了让它更具可测试性。

我的第一个想法是只调用StartEngine,等待任意数量的时间,然后断言结果发布到服务器B的模拟。然后我可以调用类似StartEngine.Abort的东西来关闭引擎。是否有更好的模式来测试这些行为?

1 个答案:

答案 0 :(得分:0)

在尝试测试时间起作用的系统时,我发现使用反应式扩展很有帮助。您可以使用TestScheduler直接从测试中获取时间间隔。以下example让我朝这个方向发展