c# - 如何正确地对该方法进行单元测试?

标签 c# asp.net-mvc unit-testing memorystream

我有一个方法(如下),它从 MVC 应用程序中的 Controller 调用,然后输出一个 excel 文件。

方法:

public static void ExportToExcel(IEnumerable<dynamic> data, string bookName, string sheetName)
{
    XLWorkbook workbook = new XLWorkbook();
    var worksheet = workbook.Worksheets.Add(sheetName);
    worksheet.Cell(1, 1).InsertTable(data);

    HttpContext.Current.Response.Clear();
    HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
    HttpContext.Current.Response.AddHeader("content-disposition", String.Format(@"attachment;filename={0}.xlsx", bookName.Replace(" ", "_")));

    using (MemoryStream memStream = new MemoryStream())
    {
        workbook.SaveAs(memStream);
        memStream.WriteTo(HttpContext.Current.Response.OutputStream);
        memStream.Close();
    }
    HttpContext.Current.Response.End();
}

Controller :

[ActionName("ExportData")]
public ActionResult ExportData()
{
    ExcelExport.ExportToExcel(_dbaccess.GetAllData()), "Workbook", "Worksheet");

    return RedirectToAction("Index");
}

如何测试这个方法?

最佳答案

您可能应该将方法进一步拆分。创建一个返回 byte[] 的方法,该方法生成表示文件的字节数组:

public static byte[] ExportToExcel(IEnumerable<dynamic> data, string bookName, string sheetName)

然后创建一个实际保存到磁盘的方法:

public static bool SaveFileToDisk(byte[] file, string path)

然后您可以测试 ExportToExcel 方法,断言它返回一个已知的 byte[]

关于c# - 如何正确地对该方法进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36625065/

相关文章:

c# - Asp.net mvc 子 Controller

ruby-on-rails - 如何在 Rails 中测试任意路由?

javascript - 为了进行单元测试,可以在 JavaScript 中创建大量类吗?

c# - .NET winforms 错误(保存文件对话框)?

c# - 你将如何实现? : Lots of rules over a tree in C#

c# - 如何根据字符串检查组合框的索引?

ruby-on-rails - 如何使用默认测试框架(minitest)在 Controller 测试中测试cancancan能力

c# - 如何在 C# 应用程序中使用 *.lib 文件?

c# - 通用存储库添加自定义方法

asp.net-mvc - AppHarbor 上的错误请求的资源只能通过 SSL 访问