Warnung: "Der Typ MockitoJUnitRunner ist veraltet"

Warnung: “Der Typ MockitoJUnitRunner ist veraltet”

1. Introduction

In diesem kurzen Tutorial werdenwe’ll have a look at one of the warnings we may see when working with the popular testing framework Mockito.

Derjenige, der sich auf die veraltete KlasseMockitoJUnitRunnerbezieht. Wir werden sehen, warum diese Warnung auftritt und wie damit umgegangen wird.

Lassen Sie uns abschließend daran erinnern, dass wir Mockito mitMockitoJUnitRunner anweisen können, unsere mit@Mock or@Spy, along annotierten Test-Doubles mit anderen Mockito-Annotationen zu initialisieren.

Weitere Informationen zum Testen mit Mockito finden Sie in unserenMockito series here.

2. Why is this Warning Shown

Diese Warnung wird angezeigt, wenn wir eine Version von Mockito vor 2.2.20 (November 2016) verwenden.

Lassen Sie uns kurz die Geschichte dahinter durchgehen. Wenn wir in früheren Versionen von Mockito den Mockito JUnit Runner verwenden wollten, mussten wir folgendes Paket importieren:

import org.mockito.runners.MockitoJUnitRunner;

Ab Version 2.2.20 wurden JUnit-bezogene Klassen in einem bestimmten JUnit-Paket zusammengefasst. Das Paket finden wir hier:

import org.mockito.junit.MockitoJUnitRunner;

Folglich ist das ursprünglicheorg.mockito.runners.MockitoJUnitRunner jetzt veraltet. Die Logik der Klasse gehört jetzt zuorg.mockito.junit.runners.MockitoJUnitRunner.

Das Entfernen der Warnung ist zwar nicht obligatorisch, wird jedoch empfohlen. Mockito 3 will remove this class.

3. Solutions

In diesem Abschnitt werden drei verschiedene Lösungen zum Beheben dieser Warnung erläutert:

  • Aktualisierung, um den richtigen Import zu verwenden

  • Felder mitMockitoAnnotations initialisieren

  • Verwenden vonMockitoRule

3.1. Updating Imports

Beginnen wir mit der einfachsten Lösung:change the package import statement:

import org.mockito.junit.MockitoJUnitRunner;

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

Und das ist alles! Die Änderung sollte relativ einfach durchzuführen sein.

3.2. Initializing Fields Using MockitoAnnotations

In diesem nächsten Beispiel istwe’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);
    }

    //...
}

Zunächst entfernen wir den Verweis aufMockitoJUnitRunner.. Stattdessen rufen wir die statischeinitMocks()-Methode derMockitoAnnotations-Klasse auf.

Wir tun dies in der Testklasse von JUnit@Before. Dies initialisiert alle Felder mit Mockito-Anmerkungen, bevor jeder Test ausgeführt wird.

3.3. Using MockitoRule

Wie bereits erwähnt, istMockitoJUnitRunner jedoch keinesfalls obligatorisch. In diesem letzten Beispielwe’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();

    //...
}

Schließlich initialisiert die JUnit-Regel in diesem Beispiel alle mit@Mock versehenen Mocks.

Dies bedeutet also, dass die explizite Verwendung vonMockitoAnnotations#initMocks(Object) oder@RunWith(MockitoJUnitRunner.class) nicht erforderlich ist.

4. Conclusion

Zusammenfassend haben wir in diesem kurzen Artikel verschiedene Optionen zum Beheben der KlassenverfallswarnungMockitoJUnitRunnergesehen.