2010-02-22 151 views
5

我有一個視圖&控制器,允許用戶上傳文件到服務器。這是在視圖中使用input type='file'並在控制器中通過獲取值Request.FilesHttpRequestBase,返回HttpFileCollectionWrapper)完成的。犀牛嘲笑:嘲諷HttpRequestBase.Files

我有困難嘲笑這使用Rhino Mocks。

HttpContextBase mockHttpContext = MockRepository.GenerateMock<HttpContextBase>(); 
HttpRequestBase mockRequest = MockRepository.GenerateMock<HttpRequestBase>(); 
mockHttpContext.Stub(x => x.Request).Return(mockRequest); 

mockRequest.Stub(x => x.HttpMethod).Return("GET"); 

// Next line fails - throws MissingMethodException 
// (Can't find a constructor with matching arguments) 
HttpFileCollectionWrapper files = 
    MockRepository.GenerateMock<HttpFileCollectionWrapper>(); 

files.Stub(x => x.Count).Return(1); 

mockRequest.Stub(x => x.Files).Return(files); 

HttpFileCollectionWrapper的構造需要HttpFileCollection,但是這有一個internal構造。

任何人都可以建議如何讓這種方法,或它的變種,工作?

回答

6

模擬HttpFileCollectionBase而不是HttpFileCollectionWrapper

var filesMock = MockRepository.GenerateMock<HttpFileCollectionBase>(); 
filesMock.Stub(x => x.Count).Return(1); 
mockRequest.Stub(x => x.Files).Return(filesMock);