Aviso: “O tipo MockitoJUnitRunner está obsoleto”
1. Introduction
Neste tutorial rápido,we’ll have a look at one of the warnings we may see when working with the popular testing framework Mockito.
Ou seja, aquele referente à classe obsoletaMockitoJUnitRunner. Vamos ver por que esse aviso acontece e como lidar com ele.
Finalmente, vamos lembrar que podemos usarMockitoJUnitRunner para instruir o Mockito a inicializar nossas duplas de teste anotadas com@Mock or@Spy, along com outras anotações Mockito.
Para saber mais sobre como testar o Mockito, verifique nossoMockito series here.
2. Why is this Warning Shown
Este aviso de descontinuação será exibido se estivermos usando uma versão do Mockito antes da 2.2.20 (novembro de 2016).
Vamos analisar brevemente a história por trás disso. Nas versões anteriores do Mockito, se queríamos usar o Mockito JUnit Runner, o pacote que precisávamos importar era:
import org.mockito.runners.MockitoJUnitRunner;
A partir da versão 2.2.20, as classes relacionadas ao JUnit foram reagrupadas em um pacote JUnit específico. Podemos encontrar o pacote aqui:
import org.mockito.junit.MockitoJUnitRunner;
Consequentemente, oorg.mockito.runners.MockitoJUnitRunner original agora está obsoleto. A lógica da classe agora pertence aorg.mockito.junit.runners.MockitoJUnitRunner.
Embora a remoção do aviso não seja obrigatória, é recomendável fazê-lo. Mockito 3 will remove this class.
3. Solutions
Nesta seção, explicaremos três soluções diferentes para resolver este aviso de descontinuação:
-
Atualizando para usar a importação correta
-
Inicializando campos usandoMockitoAnnotations
-
UsandoMockitoRule
3.1. Updating Imports
Vamos começar com a solução mais simples que é simplesmentechange the package import statement:
import org.mockito.junit.MockitoJUnitRunner;
@RunWith(MockitoJUnitRunner.class)
public class ExampleTest {
//...
}
E isso é tudo! A mudança deve ser bastante fácil de fazer.
3.2. Initializing Fields Using MockitoAnnotations
Neste próximo exemplo,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);
}
//...
}
Em primeiro lugar, removemos a referência aMockitoJUnitRunner.. Em vez disso, chamamos o métodoinitMocks() estático da classeMockitoAnnotations.
Fazemos isso no método JUnit@Before da classe de teste. Isso inicializa todos os campos com anotações do Mockito antes de cada teste ser executado.
3.3. Using MockitoRule
No entanto, como já mencionamos,MockitoJUnitRunner não é obrigatório. Neste último exemplo,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();
//...
}
Finalmente, neste exemplo, a regra JUnit inicializa quaisquer simulações anotadas com@Mock.
Portanto, isso significa que o uso explícito deMockitoAnnotations#initMocks(Object) ou@RunWith(MockitoJUnitRunner.class) não é necessário.
4. Conclusion
Para resumir, neste breve artigo, vimos várias opções sobre como corrigir o aviso de descontinuação da classeMockitoJUnitRunner.