2014-06-06 24 views
8

Śledziłem to, co sugerował @hoaz. Jednak jestem coraz NullPointer wyjątekMockito NullPointerException

@RunWith(MockitoJUnitRunner.class) 
public class GeneralConfigServiceImplTest { 

@InjectMocks private GeneralConfigService generalConfigService; 
@Mock private SomeDao someDao; 
@Mock private ExternalDependencyClass externalDependencyObject 

@Test 
public void testAddGeneralConfigCallDAOSuccess() { 
    when(someDao.findMe(any(String.Class))).thenReturn(new ArrayList<String>(Arrays.asList("1234"))); 

    //println works here, I am able to get collection from my mocked DAO 

    // Calling the actual service function 
    generalConfigService.process(externalDependencyObject) 
    } 
} 

w moim kodu to tak:

import com.xyz.ExternalDependencyClass; 

public class GeneralConfigService{ 

private SomeDao someDao; 

public void process(ExternalDependencyClass externalDependencyObject){ 

// function using Mockito 
Collection<String> result = someDao.findMe(externalDependencyObject.getId.toString()) 
    } 
} 

Ja również zauważyć, że DAO była zerowa, więc to zrobił (Wystarczy wspomnieć, zrobiłem poniżej krok do spróbować, znam różnicę między springUnit i Mockito lub xyz):

@Autowired 
private SomeDao someDao; 


rozwiązanie @John B rozwiązać mój problem. Chciałbym jednak wspomnieć o tym, co dla mnie nie działa. To jest mój zaktualizowany testów jednostkowych

@Test 
public void testAddGeneralConfigCallDAOSuccess() { 
    /* 
    This does not work 
    externalDependencyObject.setId(new ExternalKey("pk_1")); 
    // verify statement works and I thought that the class in test when call the getId 
    // it will be able to get the ExternalKey object 
    //verify(externalDependencyObject.setId(new ExternalKey("pk_1"))); 
    */ 

    // This works 
    when(externalDependencyObject.getId()).thenReturn(new ExternalKey("pk_1")); 
    when(someDao.findMe(any(String.Class))).thenReturn(new ArrayList<String>(Arrays.asList("1234"))); 

    .... 
    // Calling the actual service function 
    generalConfigService.process(externalDependencyObject) 
    } 


Referenced to pytanie w:

How do I mock external method call with Mockito

How do I set a property on a mocked object using Mockito?

+3

Czemu szyderczy coś, że jesteś autowiring? To * pachnie * tak powinno być albo czystym testem integracji w stylu Spring, albo czystym próbnym testem. – Makoto

+0

Próbowałem zrobić @Autowired krok do, ponieważ byłem uruchomiony z wyjątkiem NullPointer, ale jest uruchomiony w wyjątek, nawet po tym. Widzę, że gdy wykonuję operację 'someDao.findMe (someObject.getId.toString()) NIE wyzwala ona mojej instrukcji return Mockboro, ale zamiast tego próbuje ocenić' someObject.getId.toString() '. Kiedy zrobiłem println w teście dla 'someDao.findMe', to zwraca kolekcję. Sprawdziłem również debugowanie, 'someDao' jest już ustawiona właściwość na generalConfigService. Nie wiem więc, dlaczego to ocenia, a nie tylko zwraca moją kolekcję – Anuj

Odpowiedz

10

Nie szydzili zachowanie getId w externalDependencyObject dlatego wraca null i podając NPE, gdy toString() jest wywoływana na tej null.

trzeba when(externalDependencyObject.getId()).then...

Powiązane problemy