У меня есть класс 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 с задержкой, но это задерживает общее выполнение, и утверждения не выполняются до тех пор, пока не пройдет задержка, поэтомуэто не работает.