Mock Final Classes en Methods met Mockito

1. Overzicht

In dit korte artikel zullen we ons concentreren op het bespotten van laatste lessen en methoden - met behulp van Mockito.

Net als bij andere artikelen die zijn gericht op het Mockito-framework (zoals Mockito Verify, Mockito When / Then en Mockito's Mock Methods) zullen we de Mijn lijst klasse hieronder weergegeven als de medewerker in testgevallen.

We voegen een nieuwe methode toe aan deze tutorial:

openbare klasse MyList breidt AbstractList uit {final public int finalMethod () {return 0; }}

En we breiden het ook uit met een laatste subklasse:

openbare laatste klasse FinalList breidt MyList uit {@Override public int size () {return 1; }} 

2. Configureer Mockito voor definitieve methoden en klassen

Voordat Mockito kan worden gebruikt voor het bespotten van definitieve klassen en methoden, moet het worden geconfigureerd.

We moeten een tekstbestand toevoegen aan het src / test / resources / mockito-extensions directory met de naam org.mockito.plugins.MockMaker en voeg een enkele regel tekst toe:

mock-maker-inline 

Mockito controleert het extensies directory voor configuratiebestanden wanneer deze wordt geladen. Dit bestand maakt het mogelijk de uiteindelijke methoden en klassen te bespotten.

3. Bespotten een laatste methode

Zodra Mockito correct is geconfigureerd, kan een laatste methode worden bespot als elke andere:

@Test openbare leegte whenMockFinalMethodMockWorks () {MyList myList = nieuwe MyList (); MyList mock = mock (MyList.class); when (mock.finalMethod ()). thenReturn (1); assertNotEquals (mock.finalMethod (), myList.finalMethod ()); } 

Door een concreet exemplaar en een nepinstantie van Mijn lijst, kunnen we de waarden vergelijken die worden geretourneerd door beide versies van finalMethod () en controleer of de mock wordt genoemd.

4. Bespotten van een laatste klasse

Het bespotten van een laatste klas is net zo eenvoudig als het bespotten van een andere klas:

@Test openbare leegte whenMockFinalClassMockWorks () {FinalList finalList = nieuwe FinalList (); FinalList mock = mock (FinalList.class); when (mock.size ()). thenReturn (2); assertNotEquals (mock.size (), finalList.size ()); } 

Net als bij de bovenstaande test, maken we een concrete instantie en een nepinstantie van onze laatste klasse, bespotten we een methode en controleren we of de bespotte instantie zich anders gedraagt.

5. Conclusie

In deze korte tutorial hebben we besproken hoe je de laatste lessen en methoden kunt bespotten met Mockito door een Mockito-extensie te gebruiken.

De volledige voorbeelden zijn, zoals altijd, te vinden op GitHub.