Метод асинхронного тестирования NUnit, передаваемый после ожидающего вызова - PullRequest
0 голосов
/ 15 мая 2019

Я пишу NUnit Test для асинхронных методов и использую отчеты по экстентам для отчета о результатах. 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:

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, и на следующей строке я получаю исключение NullReferenceException для _extentTest

1 Ответ

0 голосов
/ 16 мая 2019

Вам необходимо удалить атрибут [ThreadStatic].Это останавливает распределение переменной между потоками, но await может привести к тому, что код выполнит оставшийся код в другом потоке, что приведет к тому, что ваш _extentTest станет нулевым после ожидания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...