小编Col*_*e B的帖子

在ASP.Net RC1中模拟TryUpdateModel的要求

我正在为RC1中的控制器编写一些单元测试.这是我正在测试的控制器的公共签名:

        [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult AcceptColleague()
    {
Run Code Online (Sandbox Code Playgroud)

AcceptColleague中的实现使用TryUpdateModel(同事)方法从表单字段填充Colleague对象.但是,在尝试对方法进行单元测试时,我在TryUpdateModel行上遇到"未设置为对象实例的对象引用"错误.

这是我的单元测试代码:

            // definition
        HomeController controller = new HomeController();
        IColleagueRepository fakeColleagueRepo = MockRepository.GenerateMock<IColleagueRepository>();
        Colleague requestedColleauge = new Colleague();
        EmployeeInfo currentUser = new EmployeeInfo();            
        HttpContextBase fakeHttpContext = MockRepository.GenerateMock<HttpContextBase>();
        HttpRequestBase fakeHttpRequest = MockRepository.GenerateMock<HttpRequestBase>();
        ControllerContext fakeContext = MockRepository.GenerateMock<ControllerContext>(fakeHttpContext, new RouteData(), controller);
        NameValueCollection fakeForm = new NameValueCollection();

        // expectations
        fakeColleagueRepo.Expect(c => c.Read(1234)).Return(requestedColleauge);
        fakeColleagueRepo.Expect(c => c.Update(requestedColleauge));
        fakeColleagueRepo.Expect(c => c.Add(new Colleague())).IgnoreArguments().Constraints(Is.NotNull());
        fakeContext.Expect(cx => cx.HttpContext).Return(fakeHttpContext);
        fakeHttpContext.Expect(hcx => hcx.Request).Return(fakeHttpRequest);
        fakeHttpRequest.Expect(hr => hr.Form).Return(fakeForm);

        // setup
        controller.ColleagueRepository = fakeColleagueRepo;
        controller.ControllerContext = fakeContext;
        requestedColleauge.TargetEmployeeInfoId = …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc unit-testing mocking updatemodel

5
推荐指数
1
解决办法
2012
查看次数

标签 统计

asp.net-mvc ×1

mocking ×1

unit-testing ×1

updatemodel ×1