Я собираюсь написать некоторые модульные тесты для моих контроллеров в RC1. Вот публичная подпись контроллера я тестирую:Издевательские требования для TryUpdateModel в ASP.Net 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 только с контроллера?
Крейг, спасибо большое. Наверное, я пропустил это в плавающей документации. Сейчас я работаю как шарм. Еще раз спасибо, Коул –
на самом деле вам нужно, чтобы обеспечить контекст, если вы не вы получите ArgumentNullException, значение не может быть именем null.Parameter: controllerContext –
Mvc 5.2.3 дал Null исключение Омар, описанный выше. controller.ControllerContext = new ControllerContext(); Позволяет тестировать устройство для меня. – Anthony