2015-04-12 2 views
14

Ich versuche, diesen Test auszuführen:Mock-Instanz ist null nach @Mock Anmerkung

@Mock IRoutingObjHttpClient routingClientMock; 
    @Mock IRoutingResponseRepository routingResponseRepositoryMock; 


    @Test 
    public void testSendRoutingRequest() throws Exception { 
     CompleteRoutingResponse completeRoutingResponse = new CompleteRoutingResponse(); 
     completeRoutingResponse.regression_latencyMillis = 500L; 

     Mockito.when(routingClientMock.sendRoutingRequest(any(RoutingRequest.class))).thenReturn(completeRoutingResponse); 

     RoutingObjHttpClientWithReRun routingObjHttpClientWithReRun = new RoutingObjHttpClientWithReRun 
       (routingClientMock, routingResponseRepositoryMock); 

... 
    } 

aber ich bekomme Nullpointer für:

Mockito.when(routingClientMock.

Was bin ich dabei?

+1

Nennen Sie 'MockitoAnnotations.initMocks (this)'? (Sollte wahrscheinlich in @Before-Methode sein) Oder haben Sie eine andere @Rule, von der Sie erwarten, dass sie Ihre Mocks initialisiert? (Es ist nicht automatisch) –

+0

Sie müssen den 'routingClientMock' instanziieren, z. 'routingClientMock = Mockito.mock (RoutingObjHtttpClient.class);' –

+0

Sie können auch '@RunWith (MockitoJUnitRunner.Klasse) 'in Ihrer Klasse –

Antwort

21

Wenn Sie die @Mock Anmerkung verwenden möchten, sollten Sie die Verwendung MockitoJUnitRunner

@RunWith(MockitoJUnitRunner.class) 
public class MockitoTest { 

    @Mock 
    private IRoutingObjHttpClient routingClientMock; 

    @Test 
    public void testSendRoutingRequest() throws Exception { 
     // ... 
    } 

} 

Siehe auch this tutorial.

+0

Es funktioniert nicht für mich immer gibt diesen Fehler "Dexcache == null (und keine Standard gefunden werden konnte; in Betracht ziehen Sie die Systemeigenschaft 'Dexmaker.dexcache')" – pyus13

+0

@ pyus13 Dies sollte eine neue Frage mit mehr Code sein. –

+0

Schätzen Sie die Antwort, ich denke, das Problem war, dass ich es in JUnit Test verwendet habe und während einige Code-Vereinigungen jemand aus dem Team versehentlich Dex Maker testImplementation Abhängigkeiten hinzugefügt. Nach dem Entfernen dieser Linie von build.gridle Dinge begannen zu arbeiten. Danke, hoffe das spart jemand Zeit. – pyus13

0
  1. Sie @RunWith(SpringJUnit4ClassRunner.class) in Ihrer Klasse verwenden sollten
  2. Sie haben MockitoAnnotations.initMocks(this); in @Before Methode aufzurufen
+0

warum' @RunWith (SpringJUnit4ClassRunner.class) 'und nicht' MockitoJUnitRunner.class'? –

19

Sie haben drei Möglichkeiten, die @Mock Annotation zu aktivieren. IMHO mit der MockitoRule ist die beste, weil es Sie immer noch einen anderen Läufer wie z. Parameterized.

Verwenden Sie die MockitoRule

public class MockitoTest { 

    @Mock 
    private IRoutingObjHttpClient routingClientMock; 

    @Rule 
    public MockitoRule rule = MockitoJUnit.rule(); 

    @Test 
    public void testSendRoutingRequest() throws Exception { 
    // ... 
    } 
} 

Verwenden Sie die MockitoJUnitRunner

@RunWith(MockitoJUnitRunner.class) 
public class MockitoTest { 

    @Mock 
    private IRoutingObjHttpClient routingClientMock; 

    @Test 
    public void testSendRoutingRequest() throws Exception { 
    // ... 
    } 
} 

Anruf MockitoAnnotations.initMocks(this) explizit. Dies kann in Qn @Before Methode, in Ihrem eigenen Läufer oder in einer eigenen Regel erfolgen.

public class MockitoTest { 

    @Mock 
    private IRoutingObjHttpClient routingClientMock; 

    @Before 
    public void createMocks() { 
    MockitoAnnotations.initMocks(this); 
    } 

    @Test 
    public void testSendRoutingRequest() throws Exception { 
    // ... 
    } 
} 
+1

Dies ist die vollständigste Antwort! –

-1

Wenn Sie auch PowerMock verwenden dann

@RunWith(MockitoJUnitRunner.class) 

mit

@RunWith(PowerMockRunner.class) 

ersetzt werden Dadurch wird Ihr @Mocks und aktivieren Sie die PowerMock Funktionalität aktivieren.

0

Es kann auch ein Importproblem sein, also stellen Sie sicher, dass Sie das entsprechende importierte Paket haben.

Zum Beispiel hat das "org.easymock" -Paket auch eine Anmerkung namens @Mock, die natürlich nicht mit Mockito spezifischen Setup funktioniert.