【问题标题】:MSTest: assert threads executionMSTest:断言线程执行
【发布时间】:2010-11-22 16:07:15
【问题描述】:

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

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

请指教,谢谢!

【问题讨论】:

    标签: .net multithreading mstest


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2020-04-04
          • 1970-01-01
          • 2010-09-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多