我正在尝试测试一个有 InputStream 的操作,但我真的不知道如何进行。
我正在尝试模拟类,但我注意到我们无法模拟 System.IO,因为我们没有抽象层。
所以,经过一番搜索,我倾向于使用一个包,它添加了一个 IO 系统的抽象层并将其包装起来。是“SystemWrapper”,但我没有成功使用它。
我的目标 是检查 Excel 文件头是否与 Canva 格式相同,如果格式预期为真,否则为假。
有我的代码:
我要测试的功能:
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);
}
我的输入流的类型 或者,如果你能给我另一种方法来遵循它,你会很棒。
谢谢