我想在 MVC 单元测试中测试控制器方法。
为了测试我的控制器方法,我需要一个长度为 1 的 Request.Files[] 集合。
我想模拟 Request.Files[] 因为我在控制器方法渲染的视图上使用了文件上传控件。
任何人都可以建议我如何在单元测试中模拟 request.file 集合。
谢谢,
卡皮尔
您没有提到您正在使用什么模拟框架,但以下是使用 Rhino Mocks 的方法:
控制器:
public class HomeController : Controller
{
public ActionResult Index()
{
return View(Request.Files.Count);
}
}
单元测试:
[TestMethod]
public void SomeTest()
{
// arrange
var controller = new HomeController();
var context = MockRepository.GenerateStub<HttpContextBase>();
var request = MockRepository.GenerateStub<HttpRequestBase>();
var files = MockRepository.GenerateStub<HttpFileCollectionBase>();
context.Stub(x => x.Request).Return(request);
files.Stub(x => x.Count).Return(5);
request.Stub(x => x.Files).Return(files);
controller.ControllerContext = new ControllerContext(context, new RouteData(), controller);
// act
var actual = controller.Index();
// assert
Assert.IsInstanceOfType(actual, typeof(ViewResult));
var viewResult = actual as ViewResult;
Assert.IsInstanceOfType(viewResult.ViewData.Model, typeof(int));
Assert.AreEqual(5, viewResult.ViewData.Model);
}
备注:使用MVCContrib.TestHelper http://mvccontrib.codeplex.com/wikipage?title=TestHelper这个测试可以大大简化,特别是上下文模拟部分和断言:
[TestMethod]
public void SomeTest()
{
// arrange
var sut = new HomeController();
InitializeController(sut);
Files["test.txt"] = MockRepository.GenerateStub<HttpPostedFileBase>();
// act
var actual = sut.Index();
// assert
actual
.AssertViewRendered()
.WithViewData<int>()
.ShouldBe(1);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)