Rhino Mocks: Насмешливый HttpRequestBase.Files - PullRequest
6 голосов
/ 22 февраля 2010

У меня есть представление и контроллер, которые позволяют пользователю загружать файл на сервер. Это делается в представлении с использованием input type='file' и в контроллере путем получения значения Request.Files (HttpRequestBase, возвращающего HttpFileCollectionWrapper).

Я испытываю трудности с этим издевательством, используя 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.

Кто-нибудь может подсказать, как заставить этот подход или его вариант работать?

1 Ответ

7 голосов
/ 22 февраля 2010

Макет HttpFileCollectionBase вместо HttpFileCollectionWrapper:

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