Mock Final Classes and Methods with Mockito

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.