首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Moq和SystemWrapper对动作c# MVC进行单元测试

使用Moq和SystemWrapper对动作c# MVC进行单元测试
EN

Stack Overflow用户
提问于 2016-11-28 15:59:01
回答 1查看 518关注 0票数 1

我试着在有InputStream的情况下测试一个动作,但我真的不知道该如何操作。

我试图模拟这个类,并注意到我们不能伪装System.IO,因为我们没有抽象层。

因此,经过一些搜索之后,我开始使用一个包,该包添加了IO系统的抽象层并将其包装起来。是"SystemWrapper",但我没有成功地使用它。

我的目标是:检查Excel文件头,如果它与canva格式相同,如果该格式被删除,则为true,否则为false.

这是我的密码:

函数,我想测试:

代码语言:javascript
复制
public bool checkFileHeaders(UploadedFile file)
{
    ExcelPackage package = new ExcelPackage(file.filePath.InputStream);
    ExcelWorksheet worksheet = package.Workbook.Worksheets[1];
    List<string> expectedArray = new List<string>();
    List<string> array = new List<string>();
    bool checkExprectedArrayWithReelArray = true;
    switch (file.typeFile)
    {
        case "headcount":
        expectedArray.AddRange(new string[] { "MLE", "NOM", "PRENOM", "type"      });
    try
    {
        array.AddRange(new string[] { (string)worksheet.Cells["A1"].Value,   (string)worksheet.Cells["B1"].Value, (string)worksheet.Cells["C1"].Value,   (string)worksheet.Cells["D1"].Value});
    }
    catch
    {
        checkExprectedArrayWithReelArray = false;
    }
    case "File2":
    expectedArray.AddRange(new string[] { "Field1", "Field2", "Field3" });
    try
    {
        array.AddRange(new string[] { (string)worksheet.Cells["A1"].Value, (string)worksheet.Cells["B1"].Value, (string)worksheet.Cells["C1"].Value});
    }
    catch
    {
        checkExprectedArrayWithReelArray = false;
    }
}

checkExprectedArrayWithReelArray = Enumerable.SequenceEqual(expectedArray.OrderBy(t => t), array.OrderBy(t => t));
package.Dispose();
return checkExprectedArrayWithReelArray;

}

测试功能:

代码语言:javascript
复制
    [TestMethod]
    public void CheckFileHeaders_STCWithExpectedFormat_ShouldReturnTrue()
    {
        var mockFileStream = new Mock<FileStreamWrap>();

        var _mockHttpStream = new Mock<HttpPostedFileBase>();
        _mockHttpStream.Setup(f => f.InputStream)
        .Returns( ??????);


        OpsReview.Core.Parsers.UploadedFile file = new OpsReview.Core.Parsers.UploadedFile
        {
            typeFile = "stc",
            filePath = _mockHttpStream.Object
        };
        var result = _controller.checkFileHeaders(file);
        result.Should().Be(true);
    }

输入流的类型

或者,如果你能给我另一种方法来遵循,这将是很好的你。

谢谢

EN

回答 1

Stack Overflow用户

发布于 2016-12-14 09:45:47

您可以通过设置InputStream将StreamReader的BaseStream返回到测试文件来模拟它,例如:

代码语言:javascript
复制
var mockPostedFileBase = new Mock<HttpPostedFileBase>();
mockPostedFileBase.SetupGet(s => s.InputStream).Returns(new StreamReader(/* path to test file */).BaseStream);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40848510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档