我有一个ReportHandler类,可以生成具有3种不同状态的报告。
在处理程序类中,有一个模拟的报告生成器,可以相应地对其进行设置,以返回报告或引发异常,我可以测试这些情况。
我的问题是,我需要为处于“进行中”状态的报告编写测试。
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);
}
}
我该如何编写测试,以便在调用WriteReportAsync方法后立即检查写入报告的InProgress状态?
我本来想写一个有一定延迟的最小起订量,但是这会延迟整个执行和断言,直到延迟过去,这样才行不通。