【问题标题】:How to mock Request.Files[] in MVC unit test class?如何在 MVC 单元测试类中模拟 Request.Files[]?
【发布时间】:2010-04-23 10:16:08
【问题描述】:

我想在 MVC 单元测试中测试一个控制器方法。 对于要测试的控制器方法,我需要一个长度为 1 的 Request.Files[] 集合。 我想模拟 Request.Files[] 因为我在控制器方法呈现的视图上使用了文件上传控件。 谁能建议我如何在单元测试中模拟 request.file 集合。

谢谢, 卡皮尔

【问题讨论】:

    标签: asp.net-mvc unit-testing mocking


    【解决方案1】:

    您没有提到您使用的是什么模拟框架,但这里是您使用 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 这个测试可以大大简化,尤其是上下文模拟部分和断言:

    [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);
    }
    

    【讨论】:

    • 谢谢达林。我正在使用开源模拟框架“Moq”。
    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-14
      • 1970-01-01
      • 1970-01-01
      • 2021-01-31
      • 1970-01-01
      相关资源
      最近更新 更多