MSTest:断言线程执行

时间:2010-11-22 16:07:15

标签: .net multithreading mstest

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

在这种情况下,为测试实施的最佳做法是什么?我知道在两个线程启动后我需要等待它们完成...是否有任何开箱即用的解决方案或我需要“手动”执行此操作(例如,在测试结束时我可以等待2每个事件由一个线程设置。

请指教,谢谢!

3 个答案:

答案 0 :(得分: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

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

您应该小心运行多线程单元测试。这可能会降低它们的可靠性。它更适用于集成测试。但是,如果您真的想要,可以在两个线程上调用Join

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

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

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