У меня есть действие контроллера в ASP.NET MVC, которое обрабатывает загруженные файлы. Тем не менее, кажется, что нет способа вызвать Request.Files.Count
при использовании MvcContrib's TestControllerBuilder
.
Я знаю, что могу обойти это путем абстрагирования Request.Files
. Мои вопросы:
- Действительно ли так, что прямого вызова
Request.Files.Count
при использовании TestControllerBuilder
не существует? Или я что-то не так делаю?
- Есть ли способ заглушить вызов на
Request.Files.Count
при использовании TestControllerBuilder
с использованием Rhino Mocks?
- Как вы думаете, мне следует отправить запрос или исправление для обработки
Request.Files.Count
в MvcContrib?
Пример кода:
Я хочу убедиться, что в коллекции Request.Files
есть хотя бы один файл, поэтому в моем действии есть следующее условие:
public class MyController : Controller {
public ActionResult Upload() {
if (Request.Files == null || Request.Files.Count == 0)
ViewData.ModelState.AddModelError("File", "Please upload a file");
// do stuff
return View();
}
}
Я использую TestControllerBuilder
от MvcContrib для создания двойного теста для тестов моего контроллера. Однако вызов Request.Files.Count
всегда, кажется, вызывает исключение. Например, выполнение следующего теста NUnit выдает NotImplementedException
во время вызова controller.Upload()
при вызове Request.Files.Count
:
[Test]
public void Upload_should_return_default_view_given_one_file() {
MyController controller = new MyController();
TestControllerBuilder controllerBuilder = new TestControllerBuilder();
controllerBuilder.InitializeController(controller);
controllerBuilder.Files["file"] =
MockRepository.GenerateStub<HttpPostedFileBase>();
var result = controller.Upload() as ViewResult;
Assert.That(result.ViewData.ModelState.IsValid, Is.True);
result.AssertViewRendered().ForView(string.Empty);
}
Я также попытался поставить трубку на Request.Files.Count
безрезультатно (я использую Rhino Mocks). Ничто из перечисленного не работает (даже если я заменю controller
и / или controllerBuilder
на заглушку):
controllerBuilder.Stub(cb => cb.HttpContext.Request.Files.Count).Return(1);
controller.Stub(c => c.Request.Files.Count).Return(1);
Спасибо