如何在特定状态下测试对象的状态?

时间:2019-02-04 11:16:22

标签: c# testing moq

我有一个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状态?

我本来想写一个有一定延迟的最小起订量,但是这会延迟整个执行和断言,直到延迟过去,这样才行不通。

0 个答案:

没有答案