异步 NUnit 测试方法传递 post 等待调用
Async NUnit Test Method passing post the await call
我正在为异步方法编写 NUnit 测试,并使用范围报告来报告结果。测试方法的等待步骤完成执行后,链接到我的测试的 ExtentTest 就会完成,并且我不再能够出于任何日志记录目的访问 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 class:
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
您需要删除 [ThreadStatic]
属性。这会停止在线程之间共享变量,但是 await
可能会导致代码在不同的线程上执行剩余的代码,这会导致您的 _extentTest 在 await 之后为 null。
我正在为异步方法编写 NUnit 测试,并使用范围报告来报告结果。测试方法的等待步骤完成执行后,链接到我的测试的 ExtentTest 就会完成,并且我不再能够出于任何日志记录目的访问 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 class:
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您需要删除 [ThreadStatic]
属性。这会停止在线程之间共享变量,但是 await
可能会导致代码在不同的线程上执行剩余的代码,这会导致您的 _extentTest 在 await 之后为 null。