Estoy en el proceso de escribir algunas pruebas de unidad para mis controladores en RC1. Aquí está la firma pública del controlador estoy probando:Requisitos de burla para TryUpdateModel en ASP.Net RC1
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult AcceptColleague()
{
La implementación dentro de la AcceptColleague utiliza el método TryUpdateModel (colega) de poblar el objeto colega de los campos del formulario. Sin embargo, me estoy encontrando con un error de "Referencia de objeto no configurado a una instancia de un objeto" en la línea TryUpdateModel al intentar probar el método por unidades.
Aquí es mi unidad de código de prueba:
// 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");
Me estoy perdiendo algo en la burla o debo utilizar una firma pública diferente como AcceptColleague (colega Colega) y luego probar la propiedad ModelState.IsValid?
Si es así, ¿cómo no veo una forma en que puedo simular que la propiedad ModelState de solo lectura está fuera del controlador?
Craig, muchas gracias. Supongo que me perdí eso en la documentación flotante que hay. Ahora trabajo como un encanto. Gracias de nuevo, Cole –
realmente necesita proporcionar un contexto, si no se obtiene ArgumentNullException, valor no puede ser null.Parameter nombre: ControllerContext –
MVC 5.2.3 dio la excepción nulo Omar describió anteriormente. controller.ControllerContext = new ControllerContext(); Permite que la prueba de la unidad progrese para mí. – Anthony