我在 ASP.NET MVC 中有一个控制器操作来处理上传的文件。Request.Files.Count
但是,使用 MvcContrib时似乎无法调用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
在调用 to 期间controller.Upload()
抛出a 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);
谢谢