2010-11-22 91 views
2

在我的测试中,我想启动2个线程,并检查每个线程执行结束时的一些断言条件。MSTest:断言线程执行

在这种情况下实施测试的最佳实践是什么?我明白,在两个线程启动之后,我需要等待他们完成...是否有任何现成的解决方案,或者我需要“手动”执行该操作(例如,在测试结束时,我可以等待2事件中的每一个都由一个线程来建立)。

请指教,谢谢!

回答

1

你应该小心运行多线程单元测试。这可能会使他们不太可靠。它更适合集成测试。但是,如果你真的想,你可以在这两个线程调用Join

Thread t1 = ...; 
Thread t2 = ...; 

t1.Start(); 
t2.Start(); 

// Wait for threads to finish: 
t1.Join(); 
t2.Join(); 
1

为什么不使用你的两个线程的方法Join

2

如果您使用的是.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 

为断言失败应该运行测试的线程上发生,而不是产生的线程断言条件线程测试已运行后,这一点很重要。生成的线程(即非测试线程)的异常将被视为未处理的异常,而不是“测试”断言异常。