Mit helper-Methoden in junit-Klasse
Möchte ich unit-test einer Klasse Class A
, aber es hat eine Abhängigkeit zu einer anderen Klasse verwendet, die eine user session
Methode. Die Methode, die ich testen will, nicht um user session
. Kann ich machen-Helfer-Methode in Class A
würde, repliziert das Verhalten der Class B
Methode, die ich brauche?
Ich weiß, es ist nicht klar, lasst uns Graben einige code, um ein klares Verständnis....
public void testDetails() throws Exception
{
//Some logic that generates DetailsTOList
saveDetailsHelper(DetailsTOList);
int detailsSize = getDetailsSize();
assertNotNull(detailsSize);
}
Nun getDetailsSize()
bekommen Größe Informationen aus einer Datenbank. Class B
hat diese Methode, aber ich kann nicht erstellt ein Objekt der Class B
und testen Sie diese Methode, da Class B
bekommt die session-Informationen aus User, und ich kann die session-Informationen aus dem JUnit-Klasse.
Habe ich erstellt saveDetailsHelper
Methode, die repliziert Verhalten Class B - saveDetails()
Methode, und fordere, dass in testDetails()
Methode, wie oben dargestellt.
Meine Frage:
- können, haben wir die helper-Methoden in
junit class
? - Was ist der beste Ansatz, um mit dieser situation umgehen?
- Wenn Sie nicht können oder nicht wollen, um echtes
Class B
Funktionalität in Ihren tests, aber haben wollen ", wie es wäre zu arbeiten" - werfen Sie einen Blick auf Das Konzept der Spott - dies kann sein, was du suchst - +1 für die Verwendung von mocks. Dies ist der Grund, verspottet, wurden erfunden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
JUnit-Klassen funktionieren wie jede andere Klasse in java; Sie können das gerne haben-helper-Funktionen. Die einzige Sache, die bestimmt, ob andere Funktionen ausgeführt werden, ist (abhängig von der version von junit), ob oder nicht es ist eine Anmerkung, wie er den Gurt an führen Sie es als ein test.
Jedoch, dieses problem ist genau, warum sollten Sie das design Ihrer Klassen gezielt. Wenn
Class B
ruft eine Datenbank für die Informationen, dies ist eine großartige Gelegenheit, um zu aufteilen, dass sich Funktionalität. Sie nicht klären 'Abhängigkeit' (sind Sie die Verlängerung?), aber wennClass B
ist eine Komponente der Klasse A, Sie können eine ganze stub-Klasse, ist ein stand-in fürClass B
zurück hardcoded (oder nicht codierten) Daten, die speziell für die Prüfung der Klasse A. So lange, wie die Signatur desClass B
proxy ist das gleiche, Sie können Vertrauen haben in Klasse A arbeitet.Ist es oft sinnvoll, diese inneren Klassen der test-Klasse, um die Dinge aus immer zu chaotisch in Ihrem Arbeitsbereich.
Helper-Methoden werden nicht die @Testcase annotation. Schreiben Sie test-code, wie jeder andere code, sondern würde auch nur die entsprechenden Methoden zum testen, zu validieren und nur die relevanten Teile des test-Methode.
Können Sie die helper-Methode in der test-Klasse, das auslassen der Testcase annotation und rufen Sie bei Bedarf (ad-hoc-pro-Methode oder in Ihrer Einrichtung, falls es benötigt wird für alle tests). Aber wahrscheinlich bessere Lösung ist die Verwendung von so etwas wie JMock zum darstellen der Klasse B und zurück geben Sie die gewünschten Ergebnisse.