私はasp.netのMVCについて何も知らないが、それはあなたがあなたのモックの依存関係のセットアップには、このような何かをする必要がありますように見えます:ユニットテストで
MemoryStream stream = new MemoryStream();
var mockFile = new Mock<HttpPostedFileBase>();
var mockFiles = new Mock<HttpFileCollectionBase>();
var mockRequest = new Mock<HttpRequestBase>();
mockFile.Setup(f => f.InputStream).Returns(stream);
// if for example, you index the file by name.
mockFiles.Setup(f => f[It.IsAny<string>()]).Returns(mockFile.Object);
mockRequest.Setup(r => r.Files).Returns(() => mockFiles.Object);
// write expected data to your memory stream, then instantiate your class
// under test using the mockRequest.Object
、私はむしろ、メモリストリームを使用しますファイルですが、ファイルストリームは同じように動作します。
これらの依存関係を模擬して設定する必要がないようにするには、抽象度がUploadedFiles
であり、コードが抽象度に依存するようにしてください。UploadedFiles
のみをモックしてください。これは、ファイルストリームを名前で(またはアクセスして)取得するには、Request.Files
のまわりの薄いラッパーである必要があります。ダウンストリームコードがHttpRequestBase
,HttpFileCollectionBase
,HttpPostedFileBase
,およびstring
ではなく、UploadedFiles
,Stream
およびstring
に依存するので、これはより良好である。
セットアップは、このような何かに単純化することになります。
MemoryStream stream = new MemoryStream();
var mockUploadedFiles = new Mock<UploadedFiles>();
mockUploadedFiles.Setup(u => u.GetFile(It.IsAny<string>())).Returns(stream);
おかげで、それがうまくいくように、これが見えます。私はそれを与えるだろう! – Samo