Spero che questa domanda dia alcune risposte interessanti perché è quella che mi ha infastidito per un po '.
Esiste un valore reale nell'unità di test di un controller in ASP.NET MVC?
Quello che intendo con ciò è, il più delle volte (e non sono un genio), i miei metodi di controller sono, anche nella loro forma più complessa, qualcosa del genere:
public ActionResult Create(MyModel model)
{
// start error list
var errors = new List<string>();
// check model state based on data annotations
if(ModelState.IsValid)
{
// call a service method
if(this._myService.CreateNew(model, Request.UserHostAddress, ref errors))
{
// all is well, data is saved,
// so tell the user they are brilliant
return View("_Success");
}
}
// add errors to model state
errors.ForEach(e => ModelState.AddModelError("", e));
// return view
return View(model);
}
Gran parte del lavoro pesante viene svolto dalla pipeline MVC o dalla mia biblioteca di servizi.
Quindi forse le domande da porre potrebbero essere:
- quale sarebbe il valore dell'unità test questo metodo?
- non si spezzerebbe
Request.UserHostAddress
eModelState
con una NullReferenceException? Dovrei provare a deridere questi? - se rifrattassi questo metodo in un "aiutante" riutilizzabile (che probabilmente dovrei, considerando quante volte lo faccio!), testerei che valga la pena anche quando tutto ciò che sto davvero testando è principalmente la "pipeline" che, presumibilmente, è stato testato entro un centimetro dalla sua vita da Microsoft?
Penso che il mio punto sia davvero , fare quanto segue sembra assolutamente inutile e sbagliato
[TestMethod]
public void Test_Home_Index()
{
var controller = new HomeController();
var expected = "Index";
var actual = ((ViewResult)controller.Index()).ViewName;
Assert.AreEqual(expected, actual);
}
Ovviamente sono ottuso con questo esempio esageratamente inutile, ma qualcuno ha qualche saggezza da aggiungere qui?
Non vedo l'ora ... Grazie.