Maison >Java >javaDidacticiel >Comment puis-je me moquer des classes finales en Java à l'aide de Mockito ?
Se moquer des classes finales avec Mockito
Dans le domaine des tests Java, se moquer des classes non finales est une pratique courante pour isoler les dépendances et tester code dans un environnement contrôlé. Cependant, les classes finales posent un défi distinct lorsqu'il s'agit de se moquer.
Par exemple, considérons l'exemple suivant :
public final class RainOnTrees { public void startRain() {} } public class Seasons { RainOnTrees rain = new RainOnTrees(); public void findSeasonAndRain() {rain.startRain();} }
Dans ce scénario, nous avons une classe finale nommée RainOnTrees et une classe Saisons qui en dépend. Pour tester efficacement Seasons, nous devons nous moquer de RainOnTrees. Cependant, se moquer des classes finales n'est pas intrinsèquement possible avec Mockito version 1.
Mockito Inline to the Rescue
Pour surmonter cette limitation, Mockito version 2 a introduit le mockito-inline package qui permet de se moquer des classes statiques et finales, y compris des constructeurs. Pour utiliser cette fonctionnalité, ajoutez la dépendance suivante à votre fichier Gradle :
testImplementation 'org.mockito:mockito-inline:2.13.0'
Mocking with Mockito Inline
Une fois le package mockito-inline ajouté, mockito-inline les cours deviennent simples :
@ExtendWith(MockitoExtension.class) public class SeasonsTest { @Mock RainOnTrees rainMock; @BeforeEach public void setUp() { MockitoAnnotations.initMocks(this); } @Test public void testFindSeasonAndRain() { Seasons seasons = new Seasons(); // Inject the mock into the Seasons class ReflectionTestUtils.setField(seasons, "rain", rainMock); seasons.findSeasonAndRain(); // Verify that the mocked method was called Mockito.verify(rainMock).startRain(); } }
Finale Notes
Il est important de noter que les classes finales moqueuses doivent être utilisées judicieusement, car elles peuvent conduire à des tests fragiles qui peuvent échouer si l'implémentation de la classe finale change. Lorsque cela est possible, la création de classes non finales pour l'injection de dépendances est une approche privilégiée pour les tests.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!