1. Panoramica
In questo breve articolo, ci concentreremo su come simulare classi e metodi finali, usando Mockito.
Come per altri articoli incentrati sul framework Mockito (come Mockito Verify, Mockito When / Then e Mockito's Mock Methods) useremo la classe MyList mostrata di seguito come collaboratore nei casi di test.
Aggiungeremo un nuovo metodo per questo tutorial:
public class MyList extends AbstractList { final public int finalMethod() { return 0; } }
E lo estenderemo anche con una sottoclasse finale :
public final class FinalList extends MyList { @Override public int size() { return 1; } }
2. Configurare Mockito per metodi e classi finali
Prima di poter utilizzare Mockito per deridere le classi ei metodi finali, è necessario configurarlo.
Dobbiamo aggiungere un file di testo alla directory src / test / resources / mockito-extensions del progetto denominato org.mockito.plugins.MockMaker e aggiungere una singola riga di testo:
mock-maker-inline
Mockito controlla la directory delle estensioni per i file di configurazione quando viene caricato. Questo file consente di deridere i metodi e le classi finali.
3. Mock un metodo finale
Una volta che Mockito è configurato correttamente, un metodo finale può essere deriso come qualsiasi altro :
@Test public void whenMockFinalMethodMockWorks() { MyList myList = new MyList(); MyList mock = mock(MyList.class); when(mock.finalMethod()).thenReturn(1); assertNotEquals(mock.finalMethod(), myList.finalMethod()); }
Creando un'istanza concreta e un'istanza fittizia di MyList , possiamo confrontare i valori restituiti da entrambe le versioni di finalMethod () e verificare che il mock venga chiamato.
4. Mock a Final Class
Schernire una lezione finale è facile quanto deridere qualsiasi altra classe:
@Test public void whenMockFinalClassMockWorks() { FinalList finalList = new FinalList(); FinalList mock = mock(FinalList.class); when(mock.size()).thenReturn(2); assertNotEquals(mock.size(), finalList.size()); }
Simile al test sopra, creiamo un'istanza concreta e un'istanza fittizia della nostra classe finale, deridiamo un metodo e verifichiamo che l'istanza derisa si comporti in modo diverso.
5. conclusione
In questo breve tutorial, abbiamo spiegato come simulare classi e metodi finali con Mockito utilizzando un'estensione Mockito.
Gli esempi completi, come sempre, possono essere trovati su GitHub.