c# - 如何对 FileContentResult 进行单元测试?

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

我有一个将数据导出到 CSV 文件的方法。

public FileContentResult Index(SearchModel search)
{    
    ...
    if (search.Action == SearchActionEnum.ExportToTSV)
    {
        const string fileName = "Result.txt";
        const string tab = "\t";
        var sb = BuildTextFile(result, tab);
        return File(new UTF8Encoding().GetBytes(sb.ToString()), "text/tsv", fileName);
    }
    if (search.Action == SearchActionEnum.ExportToCSV)
    {
        const string fileName = "Result.csv";
        const string comma = ",";
        var sb = BuildTextFile(result, comma);
        return File(new UTF8Encoding().GetBytes(sb.ToString()), "text/csv", fileName);
    }
    return null;
}

我的测试,在 NUnit 中:

[Test]
public void Export_To_CSV()
{
    #region Arrange
    ...
    #endregion

    #region Act

    var result = controller.Index(search);

    #endregion

    #region Assert
    result.ShouldSatisfyAllConditions(
        ()=>result.FileDownloadName.ShouldBe("Result.csv"),
        ()=>result.ContentType.ShouldBe("text/csv")
        );
    #endregion
}

除了 FileDownloadNameContentType 之外,我还想检查 result 的内容。

看来我应该查看 result.FileContents,但它是一个 byte[]

如何获取文本字符串形式的结果

每次运行测试时,我的结果是否以 CSV 文件的形式保存在解决方案的某处?

最佳答案

在您的 Index 方法中,您使用以下代码将文本内容编码为字节:

return File(new UTF8Encoding().GetBytes(sb.ToString()), "text/csv", fileName);

要从字节到原始文本,您可以使用:

string textContents = new UTF8Encoding().GetString(result.FileContents);

结果不会以 CSV 格式保存在任何地方。

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

相关文章:

c# - 从mysql数据库获取表来填充datalist

c# - 哪个更好? DataTable.Select() 或 Linq 用于过滤对象?

asp.net-mvc - Url.Action 产生查询字符串,有什么方法可以产生完整的 url?

c# - 局部 View 中的不同模型

在单元测试中从 ngrx 存储中选择时,Angular .pipe 和 .subscribe 未定义

c# - Excel加载项密码文本框

C# 从字符串中提取名称

asp.net-mvc - mvc4 new { vs 新对象{

java - 如何创建支持重绘功能的 JFrame/JPanel 模拟

javascript - 手动设置构建 Controller (单元测试)