0
私はInputStreamを持っている場所でアクションをテストしようとしていますが、実際にどのように実行するのかわかりません。SystemWrapperでMoqを使用するC#MVC
私はクラスを嘲笑しようとしています。抽象レイヤーを持たないため、System.IOをモックできないことに気付きました。
検索の結果、IOシステムの抽象レイヤーを追加してラップするパッケージを使用するようになりました。 "SystemWrapper"ですが、私はそれを使用することに成功しませんでした。
私の目標: は形式が、それは偽の他にtrueになりますexcpected場合、それはcanvaフォーマットと同じだ場合はExcelファイルのヘッダをチェックすることです。
私のコードがある:私がテストしたい
機能:
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' 'の種類は何ですか?理由はありますか?ストリームだけではありませんか? –
@NickBailey上記のようにHttpPostedFileBaseは –
です。コードを外部の依存関係に強く結ぶほど、単体テストをより難しくすることができます。あなたのコードをテストすることの難しさは、あなたのコードがどれだけうまく設計されているかを直接反映しています。あなたがコードを実装することが実装上の問題に依存する場合、テストのためにそれらを偽造しようとすると、あなた自身が問題を設定しています – Nkosi