2 Stimmen

Unit Tests für MVC3 AsyncController

Ich habe einige Beiträge zu diesem Thema gelesen, aber keiner geht direkt auf mein Problem ein. Wenn Sie eine synchrone Controller-Methode testen, können Sie sicherstellen, dass die Methode den erwarteten Typ zurückgibt:

Assert.IsInstanceOfType(result,typeof(JsonResult));

Beim Testen von Async-Controller-Methoden konnte ich jedoch nur feststellen, dass der vom AsyncManager zurückgegebene Typ der richtige Typ ist:

var result = controller.AsyncManager.Parameters["articles"];
// Assertions
Assert.IsNotNull(result);
Assert.IsInstanceOfType(result,typeof(IEnumerable<NewsArticle>));

Scheint mir, ich sollte den Rückgabetyp der Completed-Methode, die in meinem Fall ein JsonResult ist, testen:

public JsonResult GetPublishedNewsArticlesCompleted(IEnumerable<NewsArticle> articles)
{
    return Json(articles, JsonRequestBehavior.AllowGet);
}

Aber ich habe nicht herausfinden können, wie das geht. Ich las einen Beitrag von Dino Esposito in dem er sagte, dass "der Code von xxxCompleted trivial ist und wahrscheinlich nicht einmal einen Test benötigt". Das kaufe ich ihm nicht ab. Die Methode Completed und ihr Rückgabetyp sind das, was mich in diesem Test am meisten interessiert.

Also meine Frage ist, wie ich testen, dass meine Completed-Methode tatsächlich gibt mir ein JsonResult zurück? Oder ist Dino richtig und ich sollte einfach nicht kümmern?

Gracias.

0voto

Perry Punkte 611

Was ich mit meinen asynchronen Methoden getan habe, ist, nur die Async-Methode und nicht die Completed-Methode zu testen. Meine Entscheidung, dies zu tun, basiert auf der Tatsache, dass es keine Geschäftslogik in der Completed-Methode gibt. Alles, was sie tut, ist mein Rückgabeobjekt zu serialisieren und es als Json oder Jsonp zurückzugeben, wenn es domänenübergreifend ist. Ich habe es nicht geschrieben und die meisten Leute werden Ihnen sagen, wenn Sie es nicht schreiben, dann testen Sie es auch nicht.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X