【发布时间】:2010-11-22 16:07:15
【问题描述】:
在我的测试中,我想启动 2 个线程并在每个线程执行结束时检查一些断言条件。
在这种情况下,实施测试的最佳做法是什么?我知道在两个线程启动后我需要等待它们完成......是否有任何开箱即用的解决方案或者我需要“手动”执行此操作(例如,在测试结束时我可以等待 2每个事件都由一个线程设置)。
请指教,谢谢!
【问题讨论】:
标签: .net multithreading mstest
在我的测试中,我想启动 2 个线程并在每个线程执行结束时检查一些断言条件。
在这种情况下,实施测试的最佳做法是什么?我知道在两个线程启动后我需要等待它们完成......是否有任何开箱即用的解决方案或者我需要“手动”执行此操作(例如,在测试结束时我可以等待 2每个事件都由一个线程设置)。
请指教,谢谢!
【问题讨论】:
标签: .net multithreading mstest
如果您使用的是 .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
在线程测试运行后断言条件很重要,因为断言失败应该发生在运行测试的线程上,而不是生成的线程上。衍生线程(即非测试线程)上的异常将被视为未处理的异常,而不是“测试”断言异常。
【讨论】:
您应该小心运行多线程单元测试。这可能会降低它们的可靠性。它更多的是用于集成测试。但是,如果你真的想要,你可以在两个线程上调用Join:
Thread t1 = ...;
Thread t2 = ...;
t1.Start();
t2.Start();
// Wait for threads to finish:
t1.Join();
t2.Join();
【讨论】:
为什么不使用两个线程的Join 方法?
【讨论】: