我正在为异步方法编写NUnit Test,并使用范围报告来报告结果。链接到我的测试的ExtentTest在等待步骤i测试方法完成执行后立即完成,并且不再能够出于任何日志记录目的访问ExtentTest。我的代码有什么问题吗?或者这是预期的吗?
这是我的测试方法:
[Test, RequiresThread]
public async Task GetList()
{
try
{
ReportHelper.ExtentTestInfo("system.readResources() method is called");
Resources resources = await system.readResources();
ReportHelper.ExtentTestInfo("system.readResources() method finished and responded");
//Test Assertions
}
}
这是我的ReportHelper类:
public class ReportHelper
{
private static ExtentReports TestReportHTML = new ExtentReports();
var htmlReporter = new ExtentV3HtmlReporter("Test_Run_Report_" + @".html");
TestReportHTML.AttachReporter(htmlReporter);
[ThreadStatic] private static ExtentTest _extentTest;
_extentTest = TestReportHTML.CreateTest(testName); //testName is passed during [SetUp]
public static void ExtentTestInfo(string testInfo)
{
_extentTest.Info(testInfo);
}
}
一旦执行了await调用,便会传递_extentTest状态,并且在下一行,我将获得_extentTest的NullReferenceException
答案 0 :(得分:0)
您需要删除[ThreadStatic]
属性。这样会停止在线程之间共享变量,但是await
可能导致代码在其他线程上执行其余代码,这导致_extentTest在等待后为空。