Gibt es zu viele Behauptungen in diesem Komponententest?

7

Gibt es zu viele Behauptungen in diesem einen Einheitstest?

%Vor%

Ich glaube nicht, dass dieser Code eine Erklärung erfordert, aber wenn es so ist, lass es mich wissen.

    
Arlen 15.11.2010, 20:24
quelle

9 Antworten

6

Ich versuche, meine UnitTests ziemlich klein zu halten und eine Sache nach der anderen zu testen. Also würde ich wahrscheinlich getrennte Teile zu separaten Tests machen, z.

  • sendWillSendAnEmail ,
  • fromContainsSenderAddress ,
  • toContainsRecipientAddress ,
  • mailBodyContainsMailMessage ,
  • mailContainsSubject
Gordon 15.11.2010, 20:33
quelle
6

Ich denke, es ist zu groß.

Wenn Sie eine Reihe kleinerer Tests haben, können Sie eine "Fehlerlokalisierung" erhalten - nur durch Ausführen aller Tests können Sie genau sehen, wo ein Problem liegt. Mit so vielen Behauptungen, wie Sie derzeit haben (und keine Assert-Nachrichten), müssten Sie wahrscheinlich einen Debugger starten, um das herauszufinden. Denken Sie daran, dass Sie wahrscheinlich hunderte, wenn nicht tausende von Tests haben werden, und wenn einige davon versagen, wollen Sie nicht jedes einzelne debuggen, um zu sehen, warum.

Jede Assertion, die zu Beginn des Tests fehlschlägt, bedeutet auch, dass die späteren Asserts nicht ausgeführt werden. Wenn sie in einzelne Tests unterteilt sind, wird jedes Assert überprüft. Das ist eine Art Kompromiss. viele dieser Behauptungen sind wahrscheinlich verwandt und werden gleichzeitig ausfallen, so dass Sie fünf rote Tests anstelle von einem haben werden. Aber ich arbeite von der Prämisse, dass mehr Informationen besser sind, also würde ich lieber diese fünf Tests haben und wissen, dass alle fünf Behauptungen versagt haben.

    
Paul Phillips 15.11.2010 21:40
quelle
4

Ich sehe kein besonderes Problem mit Ihren Behauptungen, aber wenn Sie Ihren Code bereinigen möchten, könnten Sie

ändern %Vor%

in

%Vor%

First() wird trotzdem eine Ausnahme auslösen, so dass Sie nur durch die Änderung Ihres Codes den Vorteil erhalten, dass die Assert Sie ohne so viel Code bringt. Es gibt andere Orte, an denen Sie ähnliche Änderungen vornehmen können.

Aber als allgemeine Regel, nimm nichts als selbstverständlich in Unit Tests - und das bedeutet eine Menge Behauptungen!

    
cdhowie 15.11.2010 20:32
quelle
2

Es hängt davon ab, welche Standards Sie einhalten, aber ich würde im Allgemeinen sagen, ja, Sie haben viel zu viele Behauptungen in diesem Test.

Viele Leute behaupten, dass ein einzelner Test eine einzige Behauptung haben sollte; Ich denke, das kann ein wenig Overkill sein, aber ich glaube natürlich, dass es angemessen ist, einen einzelnen Unit-Test für einen einzelnen "Brocken" an Funktionalität zu haben; Du bist überall mit deinen Behauptungen. Der Test ist zu groß; zerlege es in mehrere verschiedene Tests.

    
Paul Sonier 15.11.2010 20:32
quelle
1

Nein, im Allgemeinen gilt, je mehr Aussagen, desto besser. Ein häufiger Fehler in Komponententests ist nicht explizit genug.

Ihr Test ist sehr explizit und lesbar. Ich mag besonders die Behauptungen über null. Es ist eine gute Übung, da es die Interpretation eines Testfehlers extrem einfach macht.

Der einzige Weg, wie Sie zu viele Behauptungen haben können, ist, wenn Sie genau dasselbe mehr als einmal behaupten, was Sie nicht tun.

    
hvgotcodes 15.11.2010 20:31
quelle
1

Ja, Sie haben zu viele Behauptungen in Ihrem Code! Darüber hinaus sollte die assert-Anweisung nur eine pro Testmethode sein. Mit vielen Behauptungen kann der Code Geruch sein, dass Sie mehr als eine Sache testen. Darüber hinaus besteht die Möglichkeit, dass jemand neue Beweise in Ihren Test aufnehmen kann, anstatt einen anderen zu schreiben. Und wie kannst du verstehen, wie deine anderen Behauptungen abgeschlossen sind, als die erste fehlschlug?

Sie können diesen Beitrag auch interessant finden: Ссылка

    
Mutex 01.06.2016 18:16
quelle
0

Ich denke, die Frage ist, ändern sich die assert () d Werte unabhängig voneinander? Wenn sie sich unabhängig voneinander ändern, sollten sie in verschiedenen Tests getestet werden, die die Bedingungen für jeden Assert variieren.

Wenn Sie jedoch einen einzelnen Codepath haben, der eine E-Mail mit all diesen Feldern erzeugt, dann ist das Testen all dieser Dinge in einem Test angemessen.

Nun ist der Test allerdings etwas schwer zu lesen. Möglicherweise möchten Sie diese Behauptungen in eine beschreibende Hilfsmethode umbrechen. Ich würde mich nicht damit beschäftigen, bis ich finde, dass die gleiche Hilfsmethode woanders nützlich sein könnte.

    
Frank Schwieterman 15.11.2010 20:36
quelle
0

Ihre vielen assert-Anweisungen sind ein Indikator dafür, wie viel Logik Sie in Komponententests haben. Sie müssen Ihre Komponententests wie normaler Code pflegen. Es ist besser, die Zeit für defensive Programmierung und Programmierung zu verwenden, als Unit-Tests zu programmieren.

    
Ashif M 16.11.2010 02:39
quelle
0

Vielleicht können Sie eine neue E-Mail-Klasse erstellen, die all diese Parameter in ihrem Standardkonstruktor akzeptiert.

Und dann können Sie eine Ausnahme auslösen, falls der Benutzer einen ungültigen Parameter übergibt.

Und in Ihrem Unit-Test

Send_sends_an_email_message

Sie können die Behauptungen hinzufügen, die nur Gleichheiten überprüfen, anstatt mit NULLs zu überprüfen.

Vielleicht können Sie in einem Test zwei E-Mails erstellen und die Gleichheit für beide Instanzen geltend machen.

    
pencilCake 16.11.2010 16:45
quelle

Tags und Links