Как проверить состояние объекта в определенном состоянии? - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть класс ReportHandler, который может создавать отчет с 3 различными статусами.

  • InProgress, когда создается отчет (это может занять от секунд до минут)
  • Успех, когда все в порядке
  • Ошибка, когда что-то пошлоНеправильно

Внутри класса обработчика есть генератор поддельных отчетов, который настраивает его соответственно, чтобы возвращать отчет или выдавать исключение, я могу протестировать эти сценарии.

Моя проблема в том, что мне нужно написать тест для отчета, который находится в статусе «InProgress».

public async Task WriteReportAsync(SearchTermsRequestData requestData, string correlationId, CancellationToken cancellationToken)
    {
        WriteToFile(new Report { Status = ReportStatusType.InProgress.ToString() }, correlationId, _applicationSettings.OutputPath);
        var reportGenerator = _reportGeneratorFactory.GetReportGenerator(requestData);

        try
        {
            // reportGenerator is mocked in tests
            // once is mocked to return a report = success
            // once is mocked to throw exeption = error
            var report = await reportGenerator
                .Generate(requestData);
            report.Status = ReportStatusType.Success.ToString();
            WriteToFile(report, correlationId, _applicationSettings.OutputPath);
        }
        catch (Exception exception)
        {
            WriteToFile(new Report { Status = ReportStatusType.Error.ToString(), Error = exception.Message }
                , correlationId, _applicationSettings.OutputPath);
            _logger.Error(exception.Message);
        }
    }

Как мне написать тест, который может проверить статус InProgressс каким отчетом пишется, как только вызывается метод WriteReportAsync?

Я думал написать moq с задержкой, но это задерживает общее выполнение, и утверждения не выполняются до тех пор, пока не пройдет задержка, поэтомуэто не работает.

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