在我的测试中,我想启动2个线程,并检查每个线程执行结束时的一些断言条件。MSTest:断言线程执行
在这种情况下实施测试的最佳实践是什么?我明白,在两个线程启动之后,我需要等待他们完成...是否有任何现成的解决方案,或者我需要“手动”执行该操作(例如,在测试结束时,我可以等待2事件中的每一个都由一个线程来建立)。
请指教,谢谢!
在我的测试中,我想启动2个线程,并检查每个线程执行结束时的一些断言条件。MSTest:断言线程执行
在这种情况下实施测试的最佳实践是什么?我明白,在两个线程启动之后,我需要等待他们完成...是否有任何现成的解决方案,或者我需要“手动”执行该操作(例如,在测试结束时,我可以等待2事件中的每一个都由一个线程来建立)。
请指教,谢谢!
你应该小心运行多线程单元测试。这可能会使他们不太可靠。它更适合集成测试。但是,如果你真的想,你可以在这两个线程调用Join
:
Thread t1 = ...;
Thread t2 = ...;
t1.Start();
t2.Start();
// Wait for threads to finish:
t1.Join();
t2.Join();
为什么不使用你的两个线程的方法Join?
如果您使用的是.NET 4,你可以用任务来完成在不同的线程上运行测试。以下将:
例子:
Action test1 =() => { /* Test code 1 */};
Action test2 =() => { /* Test code 2 */};
Task task2 = null;
Task task1 = new Task(() =>
{
task2 = new Task(test2);
task2.Start();
test1();
});
task1.Start();
task1.Wait();
task2.Wait();
//Assert test 1
//Assert test 2
为断言失败应该运行测试的线程上发生,而不是产生的线程断言条件线程测试已运行后,这一点很重要。生成的线程(即非测试线程)的异常将被视为未处理的异常,而不是“测试”断言异常。