2017-07-03 1 views
0

Ich muss einen Aufruf an die findById-Methode des GenericService verspotten.Wie verspotte ich eine Methode einer Superklasse von Mockito?

Ich habe dies:

public class UserServiceImpl extends GenericServiceImpl<User Integer> implements UserService, Serializable { 

.... 
// This call i want mock 
user = findById(user.getId()); 
..... 
// For example this one calls mockeo well. Why is not it a call to the generic service? 
book = bookService.findById(id); 

Das Problem in dem ersten Mock ist, da es ein Anruf zu einem allgemeinen Dienst ist.

Die zweite Mock funktioniert gut als auch

when(bookService.findById(anyInt())).thenReturn(mockedBook); 
+0

Können Sie den Stacktrace der Fehler der Komponententest wirft hinzufügen? Es gibt normalerweise einen guten Hinweis auf das Problem, ich vermute, dass Sie die verspottete Methode findById() mehrere Male aufrufen, aber mockito wurde das nicht gesagt. Diese – emeraldjava

+0

ist der Fehler-Stack-Stack, der die Testeinheit führt: 'java.lang.NullPointerException \t bei com.sampleCode.services.service.impl.GenericServiceImpl.findById (GenericServiceImpl.java:28) \t bei com.sampleCode .services.service.impl.UserServiceImpl.acceptUser (UserServiceImpl.java:1438) \t bei com.sampleCode.services.service.impl.UserServiceImpl.accept (UserServiceImpl.java:1421) \t bei com.sampleCode.services.UserServiceTest .testAccept (UserServiceTest.java:277) \t bei sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Methode) '... – daf0nte

Antwort

0

einen Spion der Klasse UserServiceImpl erstellen: http://www.baeldung.com/mockito-spy

Ein Spion ist ein Wrapper um ein Objekt, für das Sie noch in der Lage sind Verhalten zu definieren, z.B stubbing die findById() Methode der Super-Klasse, aber im Gegensatz zu einem Mock, nicht-stubbed-Methoden immer noch ihre tatsächliche Implementierung.

class GenericServiceImpl { 
    public void findById(){ 
     fail("not found"); 
    } 
} 

class UserServiceImpl extends GenericServiceImpl { 
    public void methodA() { 
     findById(); 
    } 
} 

@Test 
public void testSpy() { 
    // given 
    UserServiceImpl userService = Mockito.spy(new UserServiceImpl()); 

    // when 
    Mockito.doNothing().when(userService).findById(); 

    // then 
    userService.methodA(); 
} 
Verwandte Themen