2011-08-26 11 views
8

Sto provando un esempio molto semplice usando EasyMock, ma semplicemente non posso farlo costruire. Ho il seguente test case:Errore di compilazione durante l'utilizzo di EasyMock.expect() in un esempio molto semplice?

@Test 
public void testSomething() 
{ 
    SomeInterface mock = EasyMock.createMock(SomeInterface.class); 
    SomeBase expected = new DerivesFromSomeBase(); 

    EasyMock.expect(mock.send(expected)); 
} 

Tuttavia ho il seguente errore nella riga EasyMock.expect(...:

The method expect(T) in the type EasyMock is not applicable for the arguments (void) 

Qualcuno può puntare nella direzione giusta? Sono completamente perso.

risposta

10

Se si desidera testare i metodi void, chiamare il metodo che si desidera verificare sul proprio modello. Quindi chiamare il metodo expectLastCall().

Ecco un esempio:

@Test 
public void testSomething() 
{ 
    SomeInterface mock = EasyMock.createMock(SomeInterface.class); 
    SomeBase expected = new DerivesFromSomeBase(); 

    mock.send(expected); 

    EasyMock.expectLastCall().andAnswer(new IAnswer<Object>() { 
     public Object answer() { 
      // do additional assertions here 
      SomeBase arg1 = (SomeBase) EasyMock.getCurrentArguments()[0]; 

      // return null because of void 
      return null; 
     } 
    }); 
} 
+0

L'esempio non viene compilato. 'IAnswer' è un generico e ha bisogno di un modello. Se uso 'IAnswer ' non esiste il metodo 'getCurrentArguments()' disponibile nell'ambito del metodo 'answer()'. Che cosa sto facendo di sbagliato? –

+0

@bjarkef hai ragione dovrebbe essere 'EasyMock.getCurrentArguments()'. Ho avuto un'importazione statica quindi non ho notato che mancava. – Jasper

8

Dal momento che il metodo send() restituisce void, basta chiamare il metodo finto con i valori attesi e riproduzione:

SomeInterface mock = EasyMock.createMock(SomeInterface.class); 
SomeBase expected = new DerivesFromSomeBase(); 
mock.send(expected); 
replay(mock); 
+0

Dopo 'riproduzione()' Sto quindi chiamato a svolgere l'azione che sarebbe in realtà causare 'mock.send()' per questo accada. E EasyMock affermerà che le stesse chiamate che mi aspetto con gli stessi parametri vengono eseguite dalla mia classe in prova? –

+0

Sì, è corretto @bjarkef. –

0

Dal momento che si prendono in giro un'interfaccia, l'unico scopo di scherno un metodo sarebbe quello di restituire un risultato da quel metodo. In questo caso, sembra che il tipo di restituzione del metodo "invia" sia nullo. Il metodo 'EasyMock.expect' è generico e si aspetta un tipo di ritorno, che sta inducendo il compilatore a dirti che non puoi usare un metodo void perché non ha un tipo restituito.

Per ulteriori informazioni, consultare la documentazione dell'API EasyMock al numero http://easymock.org/api/easymock/3.0/index.html.

0

Non è possibile eseguire lo script dei metodi con un reso vuoto in questo modo; controlla this question per una buona risposta su come puoi prendere in giro il comportamento del tuo metodo send sull'oggetto expected.

Problemi correlati