Wie spottet man eine private dao-Variable?

8

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?

%Vor%

Wie kann ich den Aufruf von dao.create () ausspionieren?

%Vor%     
membersound 30.11.2012, 12:45
quelle

5 Antworten

5

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:

%Vor%

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:)

    
Caesar Ralf 01.12.2012, 18:23
quelle
1

Sie müssen das Dao-Feld immer noch mit Ihrem Mock setzen. Sie können dazu Reflexion verwenden.

    
dvsander 30.11.2012 12:49
quelle
1

Sie müssen das mocked object DAO in Ihrer Serviceklasse injizieren / setzen.

Wenn es sich um ein Frühlingsprojekt handelt, können Sie sich @ Spring Junit Testrunner ansehen

    
cutebug 30.11.2012 12:50
quelle
0

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.

    
Robe Elckers 30.11.2012 12:51
quelle
0

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.

%Vor%     
Brian Henry 01.12.2012 17:57
quelle

Tags und Links