Java Wie schreibt man einen Unit Test in diesem Fall

notmyname

Cadet 2nd Year
Registriert
Mai 2015
Beiträge
30
Hey,

ich komm gerade bei einem Unit-Test nicht mehr weiter.
Ich arbeite mit jUnit und Mockito (und Powermock)

Ich habe eine Klasse, die in etwas so aussieht

Code:
final Model model = new Model();
for(final ContactDTO contact : contacts) {
       if(contact != null && !contact.isEmpty() && foo != 4){
             model.add(contact.getName());
       }
}

mein Model kann ich ja nicht mocken, da es ja erst in dieser Klasse erzeugt wird. Und nicht über einen Konstruktor übergeben. Wie kann ich dann in einem Unit-Test prüfen, dass model.add NICHT aufgerufen wurde?

Könnte mir hier jemand einen Tipp geben was ich machen muss
 
Hallo,
wenn du das Objekt nicht mocken kannst, muss intern die Objekterzeugung per Dependency Injection / Factory entkoppelt werden. Dann kannst du zur Laufzeit entscheiden was für ein Objekt (von welcher Klasse) intern erzeugt werden soll. So kannst du für die Tests das Testobjekt für den Produktivbetrieb ein Produktivobjekt erzeugen. Bedingung ist dann eine gemeinsame Abstraktion der Klassen die dann zurückgeliefert werden.

greetz
hroessler
 
Zuletzt bearbeitet von einem Moderator:
Die Klasse 'Model' scheint ja erstmal keine komplexe Logik zu enthalten (von dem was man sieht). Die erste Frage wäre also eher, ob man die Klasse überhaupt mocken muss, oder einfach im nachhinein prüft, ob das model-Objekt den gewünschten Zustand hat.
 
stimmt Model enthält nur ein paar Attribute und eine Add-Methode, über die Werte zu einer Liste hinzugefügt werden können.

Ich glaube es wäre sogar besser die Model Klasse nicht zu mocken, da dieses Objekt noch weiter verwendet wird.

Wie ich allerdings hinterher prüfen könnte ob das Objekt den gewünschten Zustand hat, weiß ich nicht.
Die Methode, die ich testen möchte hat als Rückgabewert nur einen String mit "ok" oder wirft eine Exception, wenn etwas nicht passt.
Ich komme so ja im nachhinein nicht mehr an dieses Objekt ran - oder?
 
nein, dann kommst du natürlich nicht mehr direkt an das model-Objekt ran. Es ist aber schwer dir hier eine Empfehlung zu geben, da man den gesamten Kontext nicht kennt. Was passiert mit dem Model-Objekt anschließend? wird es einer anderen Service-Klasse o.Ä. übergeben, die man wiederrum mocken könnte um darüber den Zustand zu prüfen? Das sieht man hier alles nicht. Es sieht aber grundsätzlich vielleicht nicht nach dem optimalen Klassen-/Methodenaufbau aus, wenn die Methode "ok" zurückgibt oder eine Exception schmeißt.
 
Zurück
Oben