Ich bin neu im Unit-Testen. Ich habe eine REST-Webmethode, die nur DB aufruft und ein DTO auffüllt. Pseudocode ist
public object GetCustomer(int id)
{
CustomerDTO objCust = //get from DB
return objCust;
}
Mein Zweifel ist, wie man Tests für diese Methoden schreibt und welche Art von Tests (Integration / Unit) einbezogen werden sollen. Und für Unit-Tests muss es die DB treffen. Wenn dies der Fall ist und ich eine Kunden-ID übergebe und nur wenige Aussagen mache, können sich die Daten möglicherweise ändern und zu Fehlern führen.
Ich glaube, hier fehlt mir etwas, um diese Konzepte zu verstehen.
Antworten:
Während des Komponententests wird nicht erwartet, dass Sie mit einer Datenbank testen, oder zumindest nicht mit einer Datenbank, die Sie nicht für den Komponententest vorbereitet haben. Das Testen mit einer Datenbank und als solches das gleichzeitige Testen verschiedener Ebenen Ihrer Anwendung wird im Allgemeinen als Integrationstest angesehen . Bei Unit-Tests sollten Sie nur testen, was Ihre Methode tut, was sie in Abhängigkeit von verschiedenen Parametern zurückgibt und wann (oder nicht) sie fehlschlagen sollte.
Es wird sehr erwartet, dass Sie in Ihrer Methode X- Methoden aus anderen Klassen aufrufen. Sie testen diese X- Methoden nicht. Sie müssen sich also nur über diese Methoden lustig machen .
Ich nehme an, Sie schreiben Ihren Code in Java. In diesem Fall verfügen Sie über großartige Spott-Frameworks wie Mockito, die für Sie hilfreich sein können. Egal, ob Sie ein spöttisches Framework verwenden oder nicht, ich sage nur, es spart Ihnen viel Zeit, und das, was ich zumindest erwähnte, ist wirklich nicht kompliziert.
Wenn Sie nur einen eigenen Versuch schreiben möchten, nehmen wir an, Sie haben die folgende
CustomerRepository
Klasse:Sie können Ihre eigene verspottete und schmutzige
CustomerRepository
Klasse folgendermaßen schreiben :In Ihrem Testfall ersetzen Sie dann im Grunde Ihre "Standard" -Instanz von
CustomerRepository
durch eine verspottete Instanz, mit der Sie Ihre Methode auf verschiedene Ergebnisse testen könnengetCustomer
:Im Allgemeinen sollte jede Testmethode nur eines testen. Dies hilft, Ihre Tests klein zu halten und sich auf eine Aufgabe zu konzentrieren.
Ich werde es wiederholen :-) Das Schreiben einer ganzen verspotteten Klasse dauert einige Zeit, wie Sie sehen. Erwägen Sie die Verwendung eines spöttischen Frameworks. Je weniger Code geschrieben wird, desto weniger Fehler macht man , oder? Das Verspotten einer Methode, die eine Ausnahme auslöst oder einen bestimmten Wert für einen bestimmten Parameter zurückgibt, ist ein Kinderspiel und benötigt 2 oder 3 Zeilen (mindestens mit mockito).
Hoffe, das hilft beim Testen Ihrer REST-Methode.
quelle