Espero que esta pregunta dé algunas respuestas interesantes porque es una que me ha molestado por un tiempo.
¿Hay algún valor real en la unidad que prueba un controlador en ASP.NET MVC?
Lo que quiero decir con eso es que, la mayoría de las veces, (y no soy un genio), mis métodos de controlador son, incluso en su forma más compleja, algo como esto:
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);
}
La mayor parte del trabajo pesado se realiza mediante la tubería MVC o mi biblioteca de servicio.
Entonces, tal vez las preguntas para hacer podrían ser:
- ¿Cuál sería el valor de la unidad que prueba este método?
- ¿no se rompería
Request.UserHostAddress
yModelState
con una NullReferenceException? ¿Debo tratar de burlarme de estos? - si refractaria este método en un "ayudante" reutilizable (¡lo cual probablemente debería hacer, teniendo en cuenta cuántas veces lo hago!), ¿probaría que incluso valdría la pena cuando todo lo que realmente estoy probando es principalmente la "tubería" que, presumiblemente, ¿ha sido probado a una pulgada de su vida por Microsoft?
Creo que mi punto es realmente , hacer lo siguiente parece completamente inútil e incorrecto
[TestMethod]
public void Test_Home_Index()
{
var controller = new HomeController();
var expected = "Index";
var actual = ((ViewResult)controller.Index()).ViewName;
Assert.AreEqual(expected, actual);
}
Obviamente estoy siendo obtuso con este ejemplo exageradamente inútil, pero ¿alguien tiene alguna sabiduría para agregar aquí?
Estoy deseando que llegue ... Gracias.