Ich hoffe, diese Frage gibt einige interessante Antworten, weil sie mich eine Weile nervt.
Gibt es einen echten Wert beim Unit-Testen eines Controllers in ASP.NET MVC?
Was ich damit meine, ist, dass meine Controller-Methoden die meiste Zeit (und ich bin kein Genie) selbst in ihrer komplexesten Form so aussehen:
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);
}
Das meiste Heben erfolgt entweder über die MVC-Pipeline oder über meine Servicebibliothek.
Vielleicht sollten Sie also folgende Fragen stellen:
- Was wäre es wert, diese Methode in Einheiten zu testen?
- Würde es nicht auf
Request.UserHostAddress
undModelState
mit einer NullReferenceException brechen? Sollte ich versuchen, diese zu verspotten? - Wenn ich diese Methode in einen wiederverwendbaren "Helfer" umwandle (was ich wahrscheinlich tun sollte, wenn ich bedenke, wie oft ich es mache!), lohnt es sich sogar zu testen, wenn alles, was ich wirklich teste, hauptsächlich die "Pipeline" ist, die Wurde es vermutlich von Microsoft auf einen Zentimeter genau getestet?
Ich denke, mein Punkt ist wirklich , das Folgende zu tun, scheint völlig sinnlos und falsch zu sein
[TestMethod]
public void Test_Home_Index()
{
var controller = new HomeController();
var expected = "Index";
var actual = ((ViewResult)controller.Index()).ViewName;
Assert.AreEqual(expected, actual);
}
Offensichtlich bin ich mit diesem übertrieben sinnlosen Beispiel stumpf, aber hat jemand Weisheit, die er hier hinzufügen kann?
Freue mich drauf ... Danke.