2010-02-22 6 views
5

J'ai une vue & contrôleur qui permettent à l'utilisateur de télécharger un fichier sur le serveur. Ceci est fait dans la vue en utilisant un input type='file' et dans le contrôleur en obtenant la valeur de Request.Files (HttpRequestBase, renvoyant un HttpFileCollectionWrapper).Rhino Mocks: Mocking HttpRequestBase.Files

J'ai du mal à me moquer de cela en utilisant 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); 

Le constructeur de HttpFileCollectionWrapper nécessite une HttpFileCollection, mais cela a un constructeur internal. Est-ce que quelqu'un peut suggérer comment faire fonctionner cette approche, ou une variante de celle-ci?

Répondre

6

Mock HttpFileCollectionBase au lieu de HttpFileCollectionWrapper:

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