Einheit: Wie Schreibe Testfall mit jUnit und Mockito
Ich bin ganz neu Mockito und jUnit und TDD im Allgemeinen und ich versuche zu lernen, die richtige Art und Weise zu tun, TDD. Ich brauche Paare Beispiel, um einen Anstoß für mein Gehirn. ALSO bitte helft mir
Also ich habe eine Methode getNameInc(String dirPath, String filenName)
. So ein Dateiname wie bankAccount.pdf
, und wenn in diesem Ordner keine Datei mit dem Namen bankAccount.pdf
, dann wieder bankAccountAA.pdf
. Wenn es existiert eine bankAccount.pdf
dann return bankAccountBB.pdf
Die increment
ist AA-ZZ
. Wenn es zu erreichen ZZ
dann ist es ein Rollback zu AA
. Ich habe bereits implementieren die Logik dieser Methode. Wie kann ich die unit-test dieser Methode mit Mockiti und jUnit?
BEARBEITEN
Hier ist die Klasse und die Methoden, die beteiligt sind.
public class PProcessor{
private final Map<Integer, String> incMap = new HashMap<Integer, String>();
private String getNameInc(String dirPath, String filenName){
String[] nameList = new File(dirPath).list(new FilenameFilter(){
public boolean accept(File file, String name) {
//only load pdf files
return (name.toLowerCase().endsWith(".pdf"));
}
});
//Return the number of occurance that a given file name appear
//inside the output folder.
int freq = 0;
for(int i=0; i<nameList.length; i++){
if(fileName.equals(nameList[i].substring(0, 8))){
freq++;
}
}
return incMap.get(freq);
}
private void generateIncHashMap(){
incMap.put(new Integer(0), "AA");
incMap.put(new Integer(1), "BB");
incMap.put(new Integer(2), "CC");
...
}
}
generateIncHashMap()
aufgerufen werden, die im Konstruktor generieren Sie vorab die hash map
Ich habe bereits implementieren die Logik. Die Methode
getNameInc(String dirPath, String fileName)
ist bereits von mir. Ich Frage mich nur, wie unit-Tests. Es kann entweder sein, mockito oder plain old jUnit. Ich versuche zu lernen, die Idee.froh, dass Sie möchten, verwenden TDD! Aber die Klänge, die aus Ihrem letzten Kommentar, wie du geschrieben hast die Logik... was ist das Gegenteil TDD funktioniert. Zuerst einen test schreiben, der fehlschlägt, dann machen Sie den test-pass mit dem richtigen code, dann umgestalten, dass code, so ist es sauberer, aber nicht mehr als den test zu bestehen. Schreiben Sie dann eine weitere Schwäche testen. Mockito ist es, Ihnen zu helfen stub-out von komplexen Dienstleistungen, die der Klasse abhängt. Können Sie aktualisieren Sie Ihre Frage mit den Klassen, die gemeinsam auf dieses feature?
Ich update meinen post mit einigen codes. Können Sie nehmen einen Blick auf Sie.
InformationsquelleAutor Thang Pham | 2011-05-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie versuchen zu testen, Ihre getNameInc (..) - Methode, nehme ich an. Wenn Sie es nennen, sieht es für die Dateien in dem Verzeichnis, das Sie angeben, und die basieren auf, was es findet, schmückt der name den Sie ihm gegeben haben.
Machen die Klasse unit-testbar, sollten Sie die abstrakte Abhängigkeit von der-Datei-system, so dass in einem mock, können Sie simulieren, was directory-Inhalt Sie wollen. Ihre Klasse wird akzeptiert, dass eine Instanz dieser Schnittstelle als eine Abhängigkeit, und rufen Sie es, um herauszufinden, was in dem Verzeichnis. Wenn Sie die Klasse in Ihrem Programm für die real, Sie liefern eine Implementierung dieser Schnittstelle, die Delegierten zu den JDK-Dateisystem-Aufrufe. Wenn Sie unit-test der Klasse, die Sie liefern, Mockito spottet dieser Schnittstelle.
Vermeiden, dass zu viel Logik in die FilesystemImpl Klasse, da kann man nicht schreiben, eine strenge unit-test. Halten Sie es ein sehr einfacher wrapper um das Dateisystem, so dass alle die intelligente Zeug ist in Yourclass, die Sie schreiben, viele von unit-tests für.
Da gibt es eine Menge von überschneidungen zwischen den tests, würde Sie wahrscheinlich erstellen Sie eine setup-Methode, und zu tun, die dort arbeiten, und erstellen Sie eine Instanzvariable für die tests zu verwenden:
FilesystemImpl
eine Klasse, dieFilesystem
eher als eineinterface
?Du hast Recht - ich habe es korrigiert.
InformationsquelleAutor Ladlestein
Für das, was Sie beschrieben haben, da würde ich nicht die Mühe mit Mockito, es scheint nicht etwas zu sein, zu verhöhnen (denn es ist leicht zu Bearbeiten Sie die Datei system).
Ich würde testen ...
- Was passiert, wenn ich call getNameInc und es gibt keine entsprechenden Dateien, die bereits
- Was passiert, wenn ich call getNameInc und es gibt Dateien, die AA-YY es schon
- Was passiert, wenn ich call getNameInc und Datei ZZ ist es schon
Den Punkt der TDD ist aber, dass, sollten Sie bereits geschrieben haben diese tests und der Implementierung Ihres Codes zu machen, die tests übergeben. So werden Sie nicht wirklich tun, TDD, da Sie bereits den code.
InformationsquelleAutor sMoZely