我有一个约1500个测试的测试套件,它们通常在“合理的时间”内运行并完成。
但是,最近,我已经更改了部分代码以使用线程 - 现在我的构建通过简单的超时而不时失败。我想,一个线程拒绝死亡,构建一直等到达到最大构建时间。
我的问题是如何检测导致问题的测试?
我可以激活一些记录,告诉我测试已经开始/已完成吗?我当然可以通过在每个单独的测试方法中插入代码来完成 - 或者只是在灯具中插入代码,但这是很多我宁愿避免的工作。
答案 0 :(得分:2)
我建议升级到NUnit 2.5并使用Timeout属性修改测试,指定每次测试的最大运行时间。例如,您可以将其放在AssemblyInfo.cs
:
[assembly: NUnit.Framework.Timeout(100)]
NUnit现在将在一个单独的线程中启动每个测试,并在超过其时间段时取消它。但是,这可能代价很高,因此最好确定长时间运行的测试,然后删除汇编级属性,以支持测试夹具时隙。您也可以在单个测试中覆盖它,为它们分配更多的时间来运行。
这样,您可以将超时/挂起检测从CruiseControl.Net移动到NUnit,并在报告中获取有关未正确完成的任务的信息。不幸的是,当CC.Net由于超时而必须终止该过程时,它无法获取此信息。