2012-03-04 21 views
5

Sto cercando di far funzionare il metodo verify in Mockito. Ho il seguente test:Verifica Mockito non riuscita

@Test 
public void testShouldFail() 
{ 
    String string = mock(String.class); 
    string.length(); 
    verify(string, times(100)).length(); 
} 

Questo test dovrebbe fallire, ma passa. Qualcuno sa perché? Sto usando Mockito sbagliato?

Aggiornamento

Ecco un altro esempio che non manca:

private interface Bar 
{ 
    public void foo(); 
} 

@Test 
public void testShouldFail() 
{ 
    Bar bar = mock(Bar.class); 
    bar.foo(); 
    verify(bar, times(100)).foo(); 
} 
+0

Sei un secondo errore di dosaggio durante il test, puoi fornire maggiori dettagli? –

risposta

5

Ebbene, si deve fare attenzione a tale proposito: per impostazione predefinita, non si può deridere classi finali (come String) . This is a known limitation della struttura.

Il tuo esempio non riesce per me con il messaggio d'errore:

org.mockito.exceptions.base.MockitoException: 
Cannot mock/spy class java.lang.String 
Mockito cannot mock/spy following: 
    - final classes 
    - anonymous classes 
    - primitive types 
    at Test.testShouldFail(Test.java:6) 
     ... 

quindi credo che ci potrebbero essere alcuni problemi di configurazione minori nel progetto. Quale IDE stai usando? Quale versione di Mockito hai? Come corri i tuoi test?

Si potrebbe provare a utilizzare alcuni kit di strumenti aggiuntivi come PowerMock che consente di overcome this limitation. Questo schema può essere usato in combinazione con Mockito abbastanza facilmente.

D'altra parte, String fa parte del pacchetto java.lang e presumo che vi siano alcune verifiche di sicurezza aggiuntive relative a tali classi da parte della VM (non è sicuro però). Non sono convinto che tu possa prendere in giro (cioè manipolare il bytecode) di tale classe (ad esempio, ottieni un errore di compilazione se provi a inserire qualcosa nel pacchetto java.*). Ma questa è solo un'ipotesi dalla mia parte.

+0

Onestamente, ho usato 'String' come esempio veloce. Comunque, è bello sapere che Mockito ha questa limitazione. Ho aggiornato la mia domanda con un altro esempio che non fallisce. Sto usando Eclipse Indigo con Junit 4.8.2, Mockito 1.9.0 e PowerMock 1.4.11. – LandonSchropp

+0

Potresti includere l'intero test che hai realizzato, comprese le direttive di importazione? Sei sicuro di aver aggiunto i file JAR richiesti al tuo progetto? – rlegendi

+0

Ci scusiamo per la risposta tardiva. Sembra che tu avessi ragione. Ho incasinato la mia libreria Mockito quando ho aggiunto PowerMock. Si prega di aggiornare la risposta in modo da poter verificare. Grazie per l'aiuto. – LandonSchropp

Problemi correlati