12 Stimmen

Einheitstests: Fragen für Anfänger

Ich bin endlich ab mit Unit-Tests, nachdem bekannt, dass ich es für eine Weile tun sollte, aber ich habe ein paar Fragen:

  • Soll ich die Eltern erneut testen oder nicht? Klassen erneut testen, wenn die Kinder keine Methoden überschrieben wurden?
  • Wie testen Sie konzeptionell die abgeschickten Teil eines Formulars? Ich verwende PHP. ( Editar : Der Grund, warum ich dies frage ist, dass ich eine High-Level-Formular-Klasse, die ein Formular generiert, validiert es, filtert es und generiert alle Fehlermeldungen, indem Sie ein JSON-ähnliches Array als Eingabe und Delegieren an eine Vielzahl von kleineren Klassen. Allerdings kann ich die Fehler usw. nicht testen, ohne das Formular zu übermitteln. Editar : Diese Sieht aus, als könnte es eine Antwort sein.)
  • Wenn Sie einen optionalen Parameter in einer Methode haben, sollten Sie einen Test für schreiben, wenn sie vorhanden sind und wenn sie nicht vorhanden sind?
  • Sollten Unit-Tests in irgendeiner Weise mit dem Testen der Code-Ausführungszeit kombiniert Ausführungszeit kombiniert werden oder sollten sie völlig getrennt bleiben?
  • Gibt es einen triftigen Grund, die Ihre vollständige Testsuite nicht jedes Mal auszuführen?
  • Nur damit ich meine Terminologie richtig verstehe richtig verstehe, was bedeutet die Einheit in der Einheit Tests beziehen? Die getestete Klasse getestet wird? Auf die Methode? Auf den Parameter? Auf etwas anderes?

9voto

duffymo Punkte 298898
  • Übergeordnete Methode testen, untergeordnete Methode testen; wenn die untergeordnete Methode die übergeordnete Methode nicht überschreibt, muss sie nicht erneut getestet werden.
  • Ich bin mir nicht sicher, ob ich die zweite Frage verstehe. Sie können Selenium verwenden, um das Testen eines Formulars zu automatisieren. Ist es das, was Sie meinen?
  • Die Tests sollten den "glücklichen Weg" und alle Randfälle umfassen. Wenn Sie einen optionalen Parameter haben, sollten Sie Tests schreiben, die den ordnungsgemäßen Betrieb bei vorhandenem und fehlendem Wert zeigen.
  • Unit-Tests, Integrationstests, Akzeptanztests und Lasttests sind allesamt unterschiedliche Konzepte, die sich teilweise überschneiden können.
  • Ich wette, es gibt triftige Gründe, aber wenn Sie automatisierte Builds durchführen, die die Testsuite automatisch ausführen, warum sollten Sie sie nicht ausführen? Vielleicht fallen mir lange Laufzeiten ein, aber das ist der einzige Grund, der mir einfällt. Der Wert liegt darin, zu sehen, dass alle Tests weiterhin erfolgreich sind und dass die von Ihnen vorgenommenen Änderungen nichts kaputt gemacht haben.
  • Mit Unit-Test meine ich die Klasse, die man testet und die mehrere Methoden haben kann. Ich assoziiere sie mit Klassen, nicht mit Formularen. Formulare bedeuten für mich UI- und Integrationstests.

6voto

schnaader Punkte 47961

(Nicht ganz in der gleichen Reihenfolge wie Ihre Fragen)

  • Wenn die vollständige Testsuite nicht zu lange dauert, sollten Sie sie immer vollständig ausführen. Oft weiß man nicht genau, welche Nebeneffekte sich aus Änderungen ergeben können.

  • Wenn Sie Geschwindigkeitstests mit Ihrem bevorzugten Unit-Testing-Tool kombinieren können, sollten Sie dies tun. Dadurch erhalten Sie zusätzliche Informationen über die Qualität Ihrer Änderungen. Tun Sie dies aber nur für zeitkritische Teile Ihres Codes.

  • Aus Wikipedia: "Eine Unit ist der kleinste testbare Teil einer Anwendung."

2voto

Stephen Doyle Punkte 3714

Antworten auf die Fragen in der Reihenfolge:

  • Wenn die übergeordneten Klassen bereits getestet wurden, sollte man Doppelarbeit vermeiden und nur die neuen Aspekte der untergeordneten Klasse oder alle Aspekte, die die untergeordnete Klasse geändert hat, testen.
  • Ich bin mir nicht sicher - ich habe sehr wenig mit PHP gearbeitet.
  • Ja => Testen Sie alle Aspekte der Methode.
  • Sie könnten einige Unit-Tests haben, die die Leistung testen, aber sie würden sich auf die Leistung konzentrieren, während andere sich auf die Prüfung der Funktionalität konzentrieren könnten. Mischen Sie nicht beides im selben Test.
  • Im Idealfall sollten Sie sie immer und oft durchführen. Wenn die Ausführungszeit sehr lang ist, sollten Sie in Erwägung ziehen, sie in kleinere Suiten aufzuteilen und dann nur die betroffenen Suiten auszuführen, wenn sich etwas ändert - aber trotzdem alles in regelmäßigen Abständen durchführen.

2voto

Bill the Lizard Punkte 384619

Ich werde die Fragen beantworten, die ich beantworten kann.

Sollte ich die Elternklassen erneut testen, wenn ich die Kinder teste, wenn keine Methoden überschrieben wurden?

Sie sollten den Elternteil vollständig testen, dann die nur was sich ändert im Kind.

Wenn Sie optionale Parameter in einer Methode haben, sollten Sie einen Test für beide schreiben, wenn sie vorhanden sind und wenn sie nicht vorhanden sind?

Ja, testen Sie alles, was eine Verhaltensänderung bewirkt.

Sollten Unit-Tests in irgendeiner Weise mit dem Testen der Code-Ausführungszeit kombiniert werden oder sollten sie völlig getrennt bleiben?

Sie sollten getrennt bleiben. Unit-Tests dienen dazu, zu prüfen, ob eine Methode das tut, was sie tun soll. Sie sollten die Ausführungszeit des Codes auf Systemebene testen und ihn dann aufschlüsseln, um Engpässe zu finden. Das Testen der Leistung jeder einzelnen Einheit führt nur zu einer verfrühten Optimierung.

Gibt es einen triftigen Grund, nicht jedes Mal die gesamte Testsuite laufen zu lassen?

Wenn Ihre Testsuite sehr umfangreich ist und viel Zeit in Anspruch nimmt, sollten Sie vielleicht nur eine Teilmenge davon ausführen während Sie noch in der Entwicklung sind . Sie sollten die gesamte Suite ausführen, wenn Sie fertig sind, um sicherzustellen, dass Sie nichts anderes kaputt gemacht haben.

Nur damit ich meine Terminologie richtig verstehe, worauf bezieht sich die Einheit in Unit Testing? Die getestete Klasse? Auf die Methode? Auf den Parameter? Auf etwas anderes?

"Einheit" bezieht sich auf die zu prüfende Methode. Dies ist die kleinste Einheit, in die eine Software sinnvollerweise unterteilt werden kann. Eine Methode für Klasse A könnte Klasse B verwenden, aber ein Test, den Sie für diese Methode schreiben, sollte sich darum nicht kümmern. Testen Sie einfach diese Methode.

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