2017-09-24 77 views
0

背景

的NUnit的框架扩展,我的工作需要从ITestAction属性中了解每个测试的结果/结果,就像这样:NUnit TestContext.CurrentContext是否可安全地用于并行测试?

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.CurrentContextITest接口不公开测试结果,所以它似乎是唯一的方法。

问题

而现在我的问题 - 因为NUnit的3.X包括功能并行运行测试,通过ParallelizableAttribute - 我想知道:是否可以安全使用静态参考电流测试情境?我在这里应该担心的是线程安全问题吗?有没有更好的/更强大的方式来获得测试结果而不诉诸静态参考?

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

回答

1

简答:是的。

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

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