2 Stimmen

Auf welcher Ebene sollte ich Modultests durchführen?

Angenommen, in meinem Benutzermodell habe ich eine ChangePassword-Methode. Bei einem bereits initialisierten Benutzermodell nimmt es das neue Passwort als Parameter und führt die Datenbankarbeit durch, um das Zauberwerk zu bewirken. Die Benutzeroberfläche dafür ist ein Webformular, in dem der Benutzer sein aktuelles Passwort und sein gewünschtes neues Passwort eingibt. Der Controller überprüft dann, ob das aktuelle Passwort des Benutzers korrekt ist. Wenn ja, ruft er die ChangePassword-Methode des Benutzermodells auf. Wenn nicht, zeigt er dem Benutzer einen Fehler an.

Von dem, was ich höre, soll man das kleinste mögliche Stück Code testen, aber in diesem Fall wird dadurch vollständig ignoriert, zu prüfen, ob der Benutzer das korrekte aktuelle Passwort eingegeben hat. Was soll ich also tun?

Soll ich:

A) Nur vom Controller aus den Unit-Test durchführen und damit auch die Modellfunktion testen?

ODER

B) 2 verschiedene Tests erstellen; einen für den Controller und einen für das Modell?

4voto

Amber Punkte 473552

Im Zweifelsfall beide testen. Wenn Sie nur den Controller testen und der Test fehlschlägt, wissen Sie nicht, ob das Problem beim Controller oder beim Modell liegt. Wenn Sie beide testen, wissen Sie, wo das Problem liegt, indem Sie das Testergebnis des Modells betrachten - wenn es besteht, ist der Controller schuld, wenn es fehlschlägt, ist das Modell schuld.

2voto

digitaljoel Punkte 25768

A)

  • Der Test schlägt fehl. Du hast ein Problem entweder im Modell oder im Controller, oder in beiden, und verbringst Zeit damit, im Modell und im Controller zu suchen.

B)

  • Die Tests für Modell und Controller schlagen fehl... die Wahrscheinlichkeit ist hoch, dass das Problem im Modell liegt.
  • Nur der Controller-Test schlägt fehl... die Wahrscheinlichkeit ist höher, dass das Problem nicht im Modell, sondern nur im Controller liegt.
  • Nur der Modell-Test schlägt fehl... schwer vorstellbar, dass dies passiert, aber wenn es auf irgendeine Weise passiert, dann weißt du, dass das Problem im Modell und nicht im Controller liegt.

Es ist gut, beide Ebenen zu testen. So wird es später viel einfacher sein, das Problem zu finden.

1voto

JB King Punkte 11972

Es sollten hier mehrere Tests vorhanden sein:

  • Überprüfen, ob das richtige Passwort eingegeben wurde.
  • Validierung des neuen Passworts, z.B. es stimmt nicht mit dem vorhandenen überein, hat eine Mindestlänge, ausreichende Komplexität, Tests für geworfene Fehler usw.
  • Aktualisierung der Datenbank mit dem neuen Passwort.

Vergessen Sie nicht, dass die Tests auch dazu dienen können, als Dokumentation des Codes zu wirken, damit klar wird, wozu jeder Teil des Codes dient.

1voto

Malte Clasen Punkte 5487

Sie sollten vielleicht eine andere Option in Betracht ziehen: Mock-Objekte. Mit diesen können Sie den Controller ohne das Modell testen, was zu einer schnelleren Testausführung und erhöhter Test-Robustheit führen kann (wenn das Modell fehlschlägt, wissen Sie, dass der Controller immer noch funktioniert). Nun haben Sie zwei ordentliche Unit-Tests (die jeweils nur einen Codeabschnitt testen) und können bei Bedarf immer noch einen Integrationstest hinzufügen.

0voto

dfa Punkte 110809

A) ist meiner Meinung nach kein Unittest, da es mehr als eine Klasse (oder Schicht) verwendet. Daher sollten Sie wirklich nur das Modell testen.

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