Beginner Unit Testing - Testen komplexer Eingaben für Methoden

9

Ich lerne Unit Test und kämpfe mit einigen wahrscheinlich ziemlich grundlegenden Konzepten. Sagen wir, ich habe zwei Methoden.

Methode A nimmt eine Datei als Eingabe und gibt eine komplexe Objekthierarchie zurück.

Methode B nimmt die Objekthierarchie und macht etwas damit.

Ich verstehe, wie man Methode A (und die verschiedenen anderen Methoden, die sie nacheinander aufruft) testet. Ich bin verwirrt, wie man Methode B am besten prüft.

Ich kann in meinem Komponententest eine falsche Objekthierarchie aufbauen, um die Eingabe für Methode B zu sein, aber wenn ich das tue, fühlt es sich so an, als wäre mein Komponententest weniger ein Test auf Methode B und mehr ein Test, ob ich manuell eine gültige Objekthierarchie korrekt erstellt.

Es erscheint mir logischer, Methode A zu testen, die Ausgabe beizubehalten und dann Methode B zu testen, aber ich verstehe, dass jeder Unit-Test nur dazu gedacht ist, eine Sache zu testen.

Ich verstehe das Konzept des Mockings und des Fälschens, aber ich bin mir nicht sicher, ob das die Antwort hier ist, da Methode B die gesamte Objekthierarchie nicht nur auf einen kleinen Teil davon anwenden wird. p>     
Plessiez 16.05.2011, 01:49
quelle

1 Antwort

5

Ein strenger Komponententest testet etwas isoliert. Also, wenn es ein Unit-Test ist, sollten Sie isoliert testen. Sie können auch Integrationstests verwenden, die methodA und methodB zusammen testen. Ich würde persönlich mit einem Basiseinheitstest beginnen, der isoliert testet, besonders wenn Methode B nicht trivial oder missionskritisch ist. Wenn Sie isoliert testen, reduzieren Sie die Wahrscheinlichkeit, dass etwas am Test selbst einen Pass verursacht, wenn ein Test isoliert einen Fehler aufdeckt.

Es gibt Fälle, in denen es nicht praktikabel ist, isoliert zu testen. Es gibt auch Fälle, in denen zwei Methoden so trivial sind, dass ich sie zusammen testen würde, wie zum Beispiel Setter / Getter. Dies scheint jedoch nicht einer von ihnen zu sein, denn Sie beschweren sich in erster Linie über die Erstellung der Testdaten.

Um den Aufwand bei der Datenerstellung für Komponententests zu verringern, erstelle ich oft eine TestUtil-Klasse mit statischen Methoden (in Java-Land), die Daten für Tests zurückgeben, und dann teste ich das TestUtil . Auf diese Weise gehe ich nur durch den Schmerz des langweiligen Objektbaus, und ich bin mir sicher, dass es korrekt ist. In Ihrem Fall, da Sie den Dateigenerationscode getestet haben, würde ich seine Ausgabe nehmen und sie in eine dieser Hilfsmethoden einfügen, und dann die Methode method verwenden, um methodB isoliert zu testen.

Schließlich, wenn methodB eine komplexe Eingabe nimmt und seine Arbeit an der gesamten Eingabe ausführt, und ihre komplizierte, könnte es sein, dass MethodeB selbst zu kompliziert ist und in kleinere, besser zu verwaltende und testbare Methoden aufgeteilt werden sollte.

Einer der Hauptvorteile von Unit- / Integrationstests ist das Informieren des Anwendungsdesigns. Wenn es schwer zu testen ist, ist es wahrscheinlich zu kompliziert ...

BEARBEITEN - Nach Ihrer Klarstellung klingt es wie Methode B ziemlich kompliziert. Testen Sie auf jeden Fall die Methoden, die B isoliert aufruft. das einzige Mal, wenn ich das nicht machen würde, wäre, wenn alle Methoden privat sind und nicht isoliert getestet werden können.

    
hvgotcodes 16.05.2011, 01:54
quelle

Tags und Links