나는 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
, 차라리 메모리 스트림을 사용합니다 파일이지만 파일 스트림은 동일하게 작동합니다.
모방을 피하고 이러한 의존성을 모두 설정하지 않으려면 abstraction을 UploadedFiles
추상화하고 코드를 추상화에 종속되게하고 UploadedFiles
만을 모의 공격 할 수 있습니다. 파일 스트림을 이름으로 (또는 사용자가 액세스하여) 가져 오려면 Request.Files
주위의 얇은 래퍼 여야합니다. 다운 스트림 코드가 이제 HttpRequestBase
, HttpFileCollectionBase
, HttpPostedFileBase
, Stream
및 string
이 아닌 UploadedFiles
, Stream
및 string
에 의존하기 때문에 더 좋습니다.
설정 사항은 다음과 같이 단순화 될 것이다 : 그것이 작동하는 것처럼
MemoryStream stream = new MemoryStream();
var mockUploadedFiles = new Mock<UploadedFiles>();
mockUploadedFiles.Setup(u => u.GetFile(It.IsAny<string>())).Returns(stream);
덕분에,이 보인다. 나는 그것을 발사 할 것이다! – Samo