代码之家  ›  专栏  ›  技术社区  ›  Budda

MSTest:断言线程执行

  •  2
  • Budda  · 技术社区  · 15 年前

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

    在这种情况下,测试的最佳实践是什么?我知道在两个线程启动后,我需要等待它们完成。。。是否有现成的解决方案,或者我需要“手动”完成(例如,在测试结束时,我可以等待两个事件,每个事件都由一个线程设置)。

    请告知,谢谢!

    3 回复  |  直到 15 年前
        1
  •  1
  •   Steven    15 年前

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

    Thread t1 = ...;
    Thread t2 = ...;
    
    t1.Start();
    t2.Start();
    
    // Wait for threads to finish:
    t1.Join();
    t2.Join();
    
        2
  •  2
  •   Tim Lloyd    15 年前

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

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

        3
  •  1
  •   alpha-mouse    15 年前

    为什么不使用 Join 你的两条线的方法?