2014-06-06 5 views
8

Ho seguito ciò che suggeriva @hoaz. Tuttavia, io sono sempre un'eccezione nullpointerMockito 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) 
    } 
} 

nel mio codice è come questo:

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()) 
    } 
} 

Ho notato anche che DAO era nulla così ho fatto questo (Solo per citare, ho fatto il passo seguente per provo, so che la differenza tra springUnit e Mockito o XYZ):

@Autowired 
private SomeDao someDao; 


soluzione @ John B risolto il mio problema. Tuttavia vorrei menzionare ciò che non ha funzionato per me. Questo è il mio test di unità aggiornato

@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) 
    } 


di riferimento a questa domanda in:

How do I mock external method call with Mockito

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

+3

Perché stai prendendo in giro qualcosa che si sta autowiring? * Odori * come questo dovrebbe essere un puro test di integrazione in stile Spring o un puro test di simulazione. – Makoto

+0

Ho provato a fare il passaggio @Autowired da quando ero in esecuzione nell'eccezione di NullPointer, ma è in corso un'eccezione anche dopo. Vedo che quando esegue il comando 'someDao.findMe (someObject.getId.toString()) 'NON si attiva la mia istruzione return Mock, ma invece si prova a valutare' someObject.getId.toString() '. Quando ho stampato il test per 'DaoDao.findMe', restituisce la collezione. Ho anche controllato il debugging, 'someDaoDao 'è già impostato su generalConfigService. Quindi non sono sicuro del motivo per cui sta valutando e non solo restituendo la mia collezione – Anuj

risposta

10

Non hai preso in giro il comportamento di getId in externalDependencyObject quindi sta tornando null e fornendoti l'NPE quando viene chiamato il numero toString()null.

Hai bisogno di un when(externalDependencyObject.getId()).then...