异步 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。