Ich habe einen dao.create()
Aufruf, den ich beim Testen einer Methode nachahmen möchte.
Aber ich vermisse etwas, weil ich immer noch NPE bekomme. Was ist hier falsch?
Wie kann ich den Aufruf von dao.create () ausspionieren?
%Vor%Sie injizieren nicht die DAO. Mit Mockito können Sie Ihre Testklasse ändern, um @InjectMocks zu verwenden und mockito runner zu verwenden.
%Vor%Sie können mehr über InjectMocks in Inject Mocks API
lesen >Einfacher ist es, Ihre Injektion vom Konstrukteur auf Injektion umzustellen. Beispielsweise würden Sie MyService zu
ändern %Vor%Dann könntest du den Test im Setup einfach durchspielen.
%Vor% Jetzt können Sie verify
verwenden, um zu überprüfen, ob create
aufgerufen wurde, wie:
Die Verwendung von Injection by Constructor wird Ihre Abhängigkeiten für andere Entwickler klarer machen und es wird Ihnen beim Erstellen von Tests helfen:)
Wenn Sie new MyService()
verwenden, wird das Dao niemals injiziert. Damit der Dao injiziert wird, müssen Sie den MyService über eine ApplicationContext
(Spring) oder eine Injector
(Guice) laden. Wie Sie es bei Ihrer normalen Anwendung tun würden.
Wie andere schon gesagt haben, müssen Sie das dao
-Feld in Ihrer MyService
-Klasse in irgendeiner Weise einstellen. Ich bin mir nicht sicher, ob ein Compound Runner in Ihrem Test sowohl Powermock als auch einen DI-Framework-Runner verwenden kann (vorausgesetzt, dass PowerMock erforderlich ist), solange Sie PowerMock verwenden (aus Gründen, die im obigen Beispiel unklar sind). , können Sie die Whitebox nutzen Klasse, um den dao mehr manuell einzustellen.