簡體   English   中英

將Moq與SystemWrapper結合使用以對Action c#MVC進行單元測試

[英]Using Moq with SystemWrapper To unit testing an Action c# MVC

我正在嘗試測試具有InputStream的操作,但我真的不知道該如何進行。

我正在嘗試模擬該類,但我注意到我們無法模擬System.IO,因為我們沒有抽象層。

因此,在進行一些搜索之后,我打算使用一個添加IO系統抽象層並將其包裝的包。 是“ SystemWrapper”,但我沒有成功使用它。

我的目標 檢查Excel文件頭是否與canva格式相同(如果期望的格式為true,否則為false)。

有我的代碼:

我要測試的功能:

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;

}

測試功能:

    [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);
    }

我的輸入流類型 在此處輸入圖片說明 或者,如果您可以給我另一種遵循的方法,那對您來說將是很棒的。

謝謝

您可以通過設置InputStream來模擬它,以將StreamReader的BaseStream返回到測試文件,例如:

var mockPostedFileBase = new Mock<HttpPostedFileBase>();
mockPostedFileBase.SetupGet(s => s.InputStream).Returns(new StreamReader(/* path to test file */).BaseStream);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM