J'espère que cette question donne des réponses intéressantes, car c'est une question qui me dérange depuis un moment.
Existe-t-il une réelle valeur dans le test unitaire d’un contrôleur dans ASP.NET MVC?
Ce que je veux dire par là, c'est la plupart du temps (et je ne suis pas un génie), mes méthodes de contrôleur sont, même les plus complexes, quelque chose comme ceci:
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);
}
Le gros du travail est effectué par le pipeline MVC ou par ma bibliothèque de services.
Alors peut-être que les questions à poser pourraient être:
- Quelle serait la valeur du test unitaire avec cette méthode?
- ne serait-il pas cassé sur
Request.UserHostAddress
etModelState
avec une exception NullReferenceException? Devrais-je essayer de me moquer de ceux-ci? - si je réfracte cette méthode dans une "aide" réutilisable (ce que je devrais probablement, compte tenu du nombre de fois que je le fais!), testerait que cela en valait la peine alors que tout ce que je teste réellement est principalement le "pipeline" qui, vraisemblablement, a été testé à un pouce de sa vie par Microsoft?
Je pense que ce que je veux vraiment dire, c'est que faire ce qui suit semble totalement inutile et faux
[TestMethod]
public void Test_Home_Index()
{
var controller = new HomeController();
var expected = "Index";
var actual = ((ViewResult)controller.Index()).ViewName;
Assert.AreEqual(expected, actual);
}
Évidemment, je suis obtus avec cet exemple exagérément inutile, mais est-ce que quelqu'un a quelque sagesse à ajouter ici?
Dans l'attente ... Merci.