NUnit TestContext.CurrentContext在并行测试中是否可以安全使用?

时间:2017-09-24 13:14:49

标签: c# multithreading nunit

背景

我正在研究的NUnit框架扩展需要知道ITestAction属性中每个测试的结果/结果,如下所示:

public class MyFrameworkExtensionAttribute : Attribute, ITestAction
{
  public void BeforeTest(ITest test)
  { /* Omitted, not relevant to this question */ }

  public void AfterTest(ITest test)
  {
    var result = TestContext.CurrentContext.Result;
    var resultIsSuccess = result.Outcome.Status == TestStatus.Passed;
    // Then go on to do stuff with that resultIsSuccess variable
  }
}

注意AfterTest方法中的第一行;我正在使用静态引用: TestContext.CurrentContext ITest接口不公开测试结果,因此测试上下文似乎是唯一的方法。

问题

现在我的问题 - 因为NUnit 3.x包含通过ParallelizableAttribute并行运行测试的功能 - 我想知道:使用对当前测试环境的静态引用是否安全?我应该担心这里有线程安全问题吗?是否有更好/更强大的方法来获得测试结果而不诉诸静态参考?

我正在使用NUnit框架3.7.1以防万一。

1 个答案:

答案 0 :(得分:1)

简短回答:是的。

中等答案:虽然它是一个静态属性,但我们只使用它来轻松访问实际上下文,这对每个测试都是唯一的。

说明: TestContext.CurrentContext的每次使用都会创建一个新的上下文,这不是一项昂贵的操作,因为它只是TestExecutionContext.CurrentContext的包装器。根据nunit框架的平台构建,当前执行上下文以不同方式维护。对于桌面.NET,我们使用CallContext来存储它。