Attention: “Le type MockitoJUnitRunner est obsolète”

Avertissement: “Le type MockitoJUnitRunner est obsolète”

1. Introduction

Dans ce tutoriel rapide,we’ll have a look at one of the warnings we may see when working with the popular testing framework Mockito.

À savoir, celui faisant référence à la classe obsolèteMockitoJUnitRunner. Nous verrons pourquoi cet avertissement se produit et comment le gérer.

Enfin, rappelons que nous pouvons utiliserMockitoJUnitRunner pour demander à Mockito d'initialiser nos doubles de test annotés avec@Mock or@Spy, along avec d'autres annotations Mockito.

Pour en savoir plus sur les tests avec Mockito, consultez nosMockito series here.

2. Why is this Warning Shown

Cet avertissement de dépréciation apparaîtra si nous utilisons une version de Mockito avant le 2.2.20 (novembre 2016).

Passons brièvement en revue l’histoire qui se cache derrière. Dans les versions précédentes de Mockito, si nous voulions utiliser Mockito JUnit Runner, le package que nous devions importer était le suivant:

import org.mockito.runners.MockitoJUnitRunner;

À partir de la version 2.2.20, les classes liées à JUnit ont été regroupées dans un package JUnit spécifique. Nous pouvons trouver le paquet ici:

import org.mockito.junit.MockitoJUnitRunner;

Par conséquent, leorg.mockito.runners.MockitoJUnitRunner d'origine est désormais obsolète. La logique de la classe appartient désormais àorg.mockito.junit.runners.MockitoJUnitRunner.

Bien que la suppression de l’avertissement ne soit pas obligatoire, il est recommandé de le faire. Mockito 3 will remove this class.

3. Solutions

Dans cette section, nous expliquerons trois solutions différentes pour résoudre cet avertissement de dépréciation:

  • Mise à jour pour utiliser l'importation correcte

  • Initialisation des champs à l'aide deMockitoAnnotations

  • Utilisation deMockitoRule

3.1. Updating Imports

Commençons par la solution la plus simple qui consiste simplement àchange the package import statement:

import org.mockito.junit.MockitoJUnitRunner;

@RunWith(MockitoJUnitRunner.class)
public class ExampleTest {
    //...
}

Et c'est tout! Le changement devrait être assez facile à faire.

3.2. Initializing Fields Using MockitoAnnotations

Dans cet exemple suivant,we’ll initialize our mocks a different way using MockitoAnnotations class:

import org.junit.Before;
import org.mockito.MockitoAnnotations;

public class ExampleTest {

    @Before
    public void initMocks() {
        MockitoAnnotations.initMocks(this);
    }

    //...
}

Tout d'abord, nous supprimons la référence àMockitoJUnitRunner. Au lieu de cela, nous appelons la méthode statiqueinitMocks() de la classeMockitoAnnotations.

Nous faisons cela dans la méthode JUnit@Before de la classe de test. Cela initialise tous les champs avec des annotations Mockito avant l'exécution de chaque test.

3.3. Using MockitoRule

Cependant, comme nous l'avons déjà mentionné,MockitoJUnitRunner n'est en aucun cas obligatoire. Dans ce dernier exemple,we’ll look at another way we can get @Mock working using *MockitoRule*:

import org.junit.Rule;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;

public class ExampleTest {

    @Rule
    public MockitoRule rule = MockitoJUnit.rule();

    //...
}

Enfin, dans cet exemple, la règle JUnit initialise tous les simulacres annotés avec@Mock.

Par conséquent, cela signifie que l'utilisation explicite deMockitoAnnotations#initMocks(Object) ou@RunWith(MockitoJUnitRunner.class) n'est pas nécessaire.

4. Conclusion

Pour résumer, dans ce court article, nous avons vu plusieurs options sur la façon de corriger l'avertissement de dépréciation de la classeMockitoJUnitRunner.