我正在研究的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以防万一。
答案 0 :(得分:1)
简短回答:是的。
中等答案:虽然它是一个静态属性,但我们只使用它来轻松访问实际上下文,这对每个测试都是唯一的。
说明:
TestContext.CurrentContext
的每次使用都会创建一个新的上下文,这不是一项昂贵的操作,因为它只是TestExecutionContext.CurrentContext
的包装器。根据nunit框架的平台构建,当前执行上下文以不同方式维护。对于桌面.NET,我们使用CallContext
来存储它。