Sono in procinto di scrivere alcuni test di unità per i miei controller in RC1. Ecco firma pubblica del controllore sto testando:Requisiti di derisione per TryUpdateModel in ASP.Net RC1
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult AcceptColleague()
{
L'implementazione all'interno del AcceptColleague utilizza il metodo TryUpdateModel (collega) di popolare l'oggetto collega i campi del modulo. Tuttavia, sto correndo in un errore "Riferimento oggetto non impostato su un'istanza di un oggetto" sulla linea TryUpdateModel mentre provavo a testare il metodo unitario.
Ecco la mia unità di codice di prova:
// 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");
mi sto perdendo qualcosa sul beffardo o dovrei usare una firma pubblico diverso, come AcceptColleague (Collega collega) e poi prova la proprietà ModelState.IsValid?
In tal caso, in che modo non vedo come posso deridere la proprietà di sola lettura di ModelState al di fuori del controller?
Craig, grazie mille. Immagino di averlo perso nella documentazione fluttuante là fuori. Ora lavoro come un incantesimo. Grazie ancora, Cole –
in realtà è necessario per fornire un contesto, se non si ottiene ArgumentNullException, valore non può essere il nome null.Parameter: controllerContext –
MVC 5.2.3 ha dato l'eccezione Null Omar sopra descritto. controller.ControllerContext = new ControllerContext(); Permette al test dell'unità di progredire per me. – Anthony