异步NUnit测试方法在await调用后传递

时间:2019-05-15 04:10:01

标签: c# async-await nunit extentreports

我正在为异步方法编写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

1 个答案:

答案 0 :(得分:0)

您需要删除[ThreadStatic]属性。这样会停止在线程之间共享变量,但是await可能导致代码在其他线程上执行其余代码,这导致_extentTest在等待后为空。