2014-12-22 13 views
6

Ho un pezzo di codice, quello che voglio test con Mockito:Come prendere in giro instanceof in Mockito

mockedClass instanceof SampleInterface 

La classe astratta mockedClass viene deriso: MockedClass, e il SampleInterface è un'interfaccia. Questo è il punto debole:

Validate.isTrue(mockedClass instanceof SampleInterface, "The mockedClass is not a SampleInterface"); 

Come prendere in giro questo codice?

+0

solo per chiarire, 'mockedClass' è un mock-instance di tipo 'MockedClass' (cioè' mock (MockedClass.class) ') e' MockClass' implementa 'SampleInterface'? – Jonathan

+0

La classe che implementa mockedClass implementa questo SampleInterface. Non ho scritto un'informazione importante: Quella mockedClass è una classe astratta, derisa come mock (MockedClass.class). –

risposta

14

Sembra che sia necessario MockSettings.extraInterfaces.

MockedClass mockedClass = mock(MockedClass.class, 
    withSettings().extraInterfaces(SampleInterface.class)); 

Si noti che si tratta con una propria etichetta di avvertimento:

Questa funzione misterioso dovrebbe essere usato molto raramente. L'oggetto in prova dovrebbe conoscere esattamente le sue dipendenze & dei collaboratori. Se ti capita di usarlo spesso rispetto a [sic], assicurati di produrre veramente un codice leggibile & leggibile.

In alternativa, creare un'interfaccia per il test che estenda tutte le interfacce che si desidera siano implementate dalla simulazione e che si faccia beffe del solito modo.

+0

withSettings() non verrà compilato. Penso che sto usando una versione precedente di Mockito dove withSettings() non era disponibile. –

+0

MA questo è quello che ho cercato! –

+0

Felice di aiutare! Queste caratteristiche sono nuove a partire da Mockito 1.8, a partire dal 2009, quindi potrebbe valerne la pena l'aggiornamento. L'ultima versione di Mockito è 1.10 e la versione 2.0 è in arrivo a breve. –

0

Oltre alla altra risposta:

Se possibile, si dovrebbe invece deridere l'interfaccia, il che significa creare il finto in questo modo:

SampleInterface mockedClass = mock(SampleInterface.class); // not mock(MockedClass) 
Problemi correlati