Verspotten von zwei Objekten desselben Typs mit Mockito

8

Ich schreibe Komponententests mit Mockito und ich habe Probleme, die injizierten Klassen zu verspotten. Das Problem besteht darin, dass zwei der eingefügten Klassen vom selben Typ sind und nur nach ihrer @Qualifier Annotation unterschieden werden. Wenn ich versucht habe, einfach SomeClass.class zu verspotten, wird dieser Schein nicht injiziert und das Objekt ist null in meinen Tests. Wie kann ich diese Objekte verspotten?

%Vor%     
tamuren 18.03.2013, 19:23
quelle

3 Antworten

9

Ich habe versucht, zwei Objekte mit dem gleichen Typ mit Mockito 1.9.5 mit JUnit zu verspotten und es funktioniert.

Siehe: Ссылка

Relevante Typinformationen aus dem Dokument:

"Feldinjektion; Mocks werden zuerst nach Typ aufgelöst, dann, wenn es mehrere Eigenschaften desselben Typs gibt, durch die Übereinstimmung des Feldnamens und des Mock-Namens."

Und dieser, der zu sagen scheint, sollten Sie den Scheinnamen mit dem Feldnamen für alle Ihre Mocks übereinstimmen, wenn Sie zwei des gleichen Typs haben:

"Hinweis 1: Wenn Sie Felder mit demselben Typ (oder derselben Löschung) haben, ist es besser, alle @Mock annotierten Felder mit den übereinstimmenden Feldern zu benennen, da Mockito sonst verwirrt wird und keine Injektion stattfindet."

Vielleicht beißt dich dieser letztere?

    
splonk 26.05.2013 21:16
quelle
1

Ich habe gerade bestätigt, worauf Splonk hingewiesen hat, und das funktioniert in Mockito 1.9.5, sobald ich eine der gespotteten Klassen entfernt habe, ist es fehlgeschlagen.

Stellen Sie in Ihrem Fall also sicher, dass Sie beide verspotteten Klassen mit demselben Namen wie in der Klasse in Ihrem Test haben:

%Vor%     
hesparza 22.08.2016 23:05
quelle
0

Wenn Sie keine Annotation verwenden, erhalten Sie etwas wie

%Vor%

und

%Vor%

Sie können genau das gleiche tun, wenn Ihr Objekt seine Abhängigkeiten über Konstruktor und nicht über Setter spezifiziert hat. Ich nehme an, Ihr Abhängigkeitsinjektions-Framework kann die Setter auf die gleiche Weise mit Annotationen versehen wie private Felder, aber jetzt basieren Ihre Tests nicht auf einem Framework zur Abhängigkeitsinjektion.

    
rcomblen 18.03.2013 20:22
quelle

Tags und Links