0
我想測試一個動作,我有一個InputStream,我真的不知道如何進行。與SystemWrapper使用Moq要單元測試一個動作c#MVC
我在嘲笑這個類,我發現我們不能模擬System.IO,因爲我們沒有抽象層。
所以,在一些搜索之後,我將面向使用一個添加了IO系統抽象層幷包裝它的軟件包。是「SystemWrapper」,但我沒有成功使用它。
我的目標: 是辦理登機手續的Excel文件頭,如果是一樣的canva格式,如果格式excpected這將是真實的,否則返回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);
}
我的輸入流的類型 或者,如果你可以給我另一種方法來跟蹤它,這對你來說會很棒。
感謝
什麼'file.filePath.InputStream'類型嘲笑呢?有沒有理由不能只是一個'Stream'? –
@NickBailey它是一個HttpPostedFileBase,你可以在上面看到 –
你越緊密地將你的代碼連接到外部依賴關係,你就越難讓它進行單元測試。測試代碼的難度直接反映了您的代碼設計得有多好。如果你的代碼依賴於執行的擔憂,那麼你設置你的自我彌補問題,當你試圖僞造起來進行測試 – Nkosi