5
我正在爲RC1中的控制器編寫一些單元測試。這裏是 控制器公共簽名我測試:ASP.Net中TryUpdateModel的模擬要求RC1
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult AcceptColleague()
{
的AcceptColleague內實現使用從表單字段填充同事對象的TryUpdateModel(同事)方法。但是,嘗試單元測試方法時,我遇到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 = 123456;
requestedColleauge.GeneratedEmployeeInfoId = 654321;
currentUser.EmployeeInfoId = 123456;
fakeForm.Add("ColleagueId", "22222");
// action
RedirectToRouteResult result = controller.AcceptColleague() as RedirectToRouteResult;
// validation
Assert.IsNotNull(result, "AcceptColleague() did not return RedirectToRouteResult");
我缺少的東西在嘲諷或者我應該使用像AcceptColleague(同事的同事)不同的公衆簽名,然後測試ModelState.IsValid財產?
如果是這樣,怎麼看不到一種方式我可以嘲笑控制器的只讀ModelState屬性?
克雷格,非常感謝。我想我錯過了那裏的浮動文檔。我現在像一種魅力。再次 感謝, 科爾 – 2009-02-09 22:04:02