Ich verwende ASP.NET MVC schon seit einiger Zeit und finde, dass ich ständig andere Dinge als ActionResult von meinen Controllern zurückgebe. Ich gebe natürlich ViewResults, aber auch JSonResults und einige benutzerdefinierte Ergebnisse zurück, die wir selbst erstellt haben.
Ich wundere mich, wenn ich meine Controller-Methoden nicht wie folgt deklariere:
%Vor%Ich sollte anfangen, sie als
zu deklarieren %Vor%oder
%Vor%Wenn ich immer weiß , dass die Index-Aktion auf meinem Controller immer ein ViewResult zurückgibt oder die Suche auf meinem Controller immer ein JsonResult zurückgibt?
BEARBEITEN: Nur um zu verdeutlichen, spreche ich speziell über Situationen, in denen ich immer eine bestimmte Art von ActionResult zurückgeben möchte.
Ich stimme aus zwei Gründen ja.
Sie deklarieren explizit, was Sie erwarten, dass die Methode zurückgegeben wird, und der Compiler wird jeden Versuch, etwas anderes zu tun, abfangen. Kein Bedarf für einen Komponententest, der ein Assert (Ergebnis ist ViewResult).
Sie müssen das Ergebnis in den Tests in den erwarteten Typ umwandeln, wenn Sie alle für diesen Ergebnistyp eindeutigen Eigenschaften untersuchen (z. B. die Url-Eigenschaft des RedirectResult überprüfen). Wenn Sie die Testvariable einfach als var
deklarieren, wird jegliche Sprödigkeit, die durch das Ändern von Typen entsteht, entfernt.
Wenn Sie einen spezifischeren Rückgabetyp deklarieren, gewinnen Sie ein wenig mehr von der Art des Compilertyps, den Sie jetzt nicht in Unit-Tests abdecken müssen.
Sie würden sich jedoch an diesen Typ binden und müssten zurückkehren, wenn sich das ändert. Ein übliches Beispiel ist, wenn Sie den Benutzer an einigen besonderen Bedingungen anderswo umleiten müssen, indem Sie ein RedirectResult zurückgeben.
Ich würde es als generisches ActionResult lassen. Wenn Sie das spezifische Ergebnis festlegen und später ändern, müssen einige, wenn nicht alle Tests Ihrer Einheit neu geschrieben werden, um die Änderung zu berücksichtigen. Dadurch werden Ihre Gerätetests spröder als notwendig.
BEARBEITEN : Indem Sie es als ActionResult belassen, erlauben Sie sich zusätzlich die Fähigkeit, verschiedene Ergebnisse basierend auf Ihrer Aktionslogik zurückzugeben. Beispielsweise kann der normale Ablauf Ihrer Methode ein RedirectResult zurückgeben, aber Sie verfügen möglicherweise über Fehlerpfade, die ein ViewResult oder HttpUnauthorizedResult zurückgeben. Wenn Sie Ihre Methode stärker eingeben als ursprünglich benötigt, können Sie sie später unnötigerweise umgestalten und Ihre Tests später hinzufügen, wenn Sie alternative Ergebnisse hinzufügen.
Die Quintessenz ist, dass ich keine wirklichen Vorteile und zumindest ein paar Nachteile sehe.
Tags und Links asp.net-mvc