# Mocking de méthodes et classes finales
Par défaut, Mockito ne permet pas de mocker les classes et les méthodes final. Le support pour ces cas d'utilisation a néanmoins été ajouté à partir des versions >= 2.1.0 en mode incubation. Cette article décrit comment ajouter cette fonctionnalité.
WARNING
Lorsqu'une classe finale est mockée sans que la fonctionnalité soit activée, Mockito renvoie l'erreur suivante:
org.mockito.exceptions.base.MockitoException:
Cannot mock/spy ...
Mockito cannot mock/spy because :
- final class
2
3
4
# Installation with maven
Si ce n'est pas déjà fait, ajouter Mockito comme dépendance de test et vérfier que sa version est supérieure ou égale à la version 2.1.0.
<dependencies>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>2.28.2</version>
<scope>test</scope>
</dependency>
</dependencies>
2
3
4
5
6
7
8
# Configuration
Pour activer le support des mock sur les classes et les méthodes finales, il suffit d'ajouter le fichier
src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
avec comme seule ligne:
mock-maker-inline
# Usage
A partir de là, il est possible de créer des mocks des méthodes et des classes finales de la même manière que pour n'importe quelles autres méthodes ou classes. Par exemple, mocker la classe suivante n'est plus un problème:
public final class PopulationDensity {
public final double of(Country country) {
return country.getPopulation() / country.getAreaInSqKm();
}
}
2
3
4
5
6
@Test
public void mockFinalClass() {
PopulationDensity density = mock(PopulationDensity.class);
when(density.of(any())).thenReturn(42d);
assertThat(density.of(Country.FRANCE)).isEqualTo(42d);
assertThat(density.of(Country.CHINA)).isEqualTo(42d);
}
2
3
4
5
6