针对返回 FileStreamResult 的控制器的 ASP.NET MVC Moq 单元测试

jef*_*chi 2 asp.net-mvc unit-testing filestreamresult

我正在针对返回 pdf 文件的控制器编写测试用例。

控制器代码:

  public FileStreamResult GeneratePdfReport(string context)
    {
        byte[] pdfReportContents = _helpPageBusinessService.GetHelpPagesAsPdf();
        Stream stream = new MemoryStream(pdfReportContents);
        HttpContext.Response.AddHeader("content-disposition", "attachment; filename=GSFA_Help_Pages_Printout.pdf");
        return new FileStreamResult(stream, "application/pdf");
    }
Run Code Online (Sandbox Code Playgroud)

单元测试代码:

 [TestMethod]
    public void GeneratePdf()
    {
        var controller = new HelpController(_helpPageBusinessServiceReportServices, Logger);
        try
        {
            var result = controller.GeneratePdfReport("Work_Request_Section");
            Assert.IsNotNull(result);
            Assert.IsNotNull(result.FileStream);
        }
        finally
        {
            controller.Dispose();
        }
    }
Run Code Online (Sandbox Code Playgroud)

这个单元测试用例不起作用,它总是失败,因为 HttpContext 为空。

有没有人知道如何针对这种类型的控制器编写单元测试用例?

非常感激 !

杰弗里

Dar*_*rov 5

您需要模拟 HttpContext和响应对象。您的控制器操作也可以缩短一点:

public ActionResult GeneratePdfReport(string context)
{
    byte[] pdfReportContents = _helpPageBusinessService.GetHelpPagesAsPdf();
    HttpContext.Response.AddHeader("content-disposition", "attachment; filename=GSFA_Help_Pages_Printout.pdf");
    return File(pdfReportContents, "application/pdf");
}
Run Code Online (Sandbox Code Playgroud)