2015-06-25 6 views
33

Wygląda na to, że tylko mockito sprawdza, czy metoda pozornego obiektu jest wywoływana, a obiekt próbny zawsze ma cokolwiek. jak doReturn(). kiedy (atrapa obiektu) ...jak zweryfikować metodę obiektu niemostugowego?

Ale mogę creat atrapa obiektu i zdefiniować doReturn(). kiedy (atrapa obiektu) .. a następnie zweryfikować sposób inny obiekt nazywa?

Oto, co chcę zrobić: definiuję fałszywe środowisko i zwracam odpowiedź bez względu na to, co się stanie. Ale wtedy chcę sprawdzić różne metody innegoObj jest wywoływana w różnych przypadkach.

Jak to zrobić?

public class BaseClass { 
    private Environment mockEnvironment; 
    @Test 
    public void testcase() { 
    setMockitoEnvironment(); 
    response = foo(mockEnvironment, argument1); 
    verify(anotherObj).codePath1(...); 
    response = foo(mockEnvironment, argument2); 
    verify(anotherObj).codePath2(...); 
    } 
} 

//this method successfully return a response with any input 
//because I do not care how response is eventually generated, 
//I only care whether code path reaches createResponse() via 
//code path 1 or code path 2. 
private void setMockitoEnvironment() { 
    mockEnvironment = mock(Environment.class); 
    doReturn (response).when(mockEnvironment).createResponse(for any input); 
} 
private Response foo(...) { 
    ... 
    return createResponse(...); 
} 

Odpowiedz

47

Możesz użyć do tego celu Mockito Spy. Jeśli ustawisz anotherObj jako szpiega, możesz zweryfikować wywołania metod na tym obiekcie. W twoim przykładzie musisz upewnić się, że wywołanie foo używa szpiega zamiast zwykłej implementacji anotherObj. Szpieg jest skonfigurowany w następujący sposób:

AnotherClass anotherObjSpy = Mockito.spy(new AnotherClass()); 
// do stuff 
verify(anotherObjSpy).codePath1(...); 
+0

To oznacza, że ​​może potrzebować utworzyć i wstrzyknąć wiele wyśmianych obiektów, jeśli chcę zweryfikować wiele rzeczy? to nie jest wygodne. – user389955

+0

@ user389955 Tak, musisz ustawić każdy obiekt, który chcesz sprawdzić jako szpieg. O ile wiem, nie ma na to odwrotu. Mockito musi dodać proxy do obiektów, a ktoś musi powiedzieć Mockito, który sprzeciwia się proxy. –

+1

Zamiast mówić "// robić rzeczy", może być pomocne dodanie, że to "innyObjSpy" musi wywoływać testowanie metody. – jwehrle