[JAVA] Verspotten Sie statische Methoden in Mockito 3.4

Überblick

Unterstützung für das Verspotten statischer Methoden ab Version 3.4 von Mockito. Dadurch entfällt die Notwendigkeit, PowerMock zu installieren, wenn Sie nur statische Methoden verspotten möchten.

Umgebung

Zusätzlich zu dem oben genannten Glas benötigen Sie einen neuen "Mockito-Inline" - und "Byte-Buddy-Agent".

Sie können sie von Mockito Official Site bzw. ByteBuddy Official Site herunterladen.

Ausführung
java 8
JUnit 5

Beispielcode

Klasse verspottet werden

Enthält statische Methoden.

public class MockedClass {

    public static String methodA() {
        return "val1";
    }

    public static String methodB() {
        return "val2";
    }

    public static String methodC(String str) {
        return str;
    }
}

Testklasse

public class MockedClassTest {

    @Test
    public void test() throws Exception {

        //Erwarteter Wert
        String expected_methodA = "test";
        String expected_methodB = "val2";

        //Die Zielklasse verspotten
        MockedStatic<MockedClass> mocked = Mockito.mockStatic(MockedClass.class);
        //Legen Sie einen Rückgabewert fest und machen Sie ihn zu einem Stub
        mocked.when(MockedClass::methodA).thenReturn(expected_methodA);
        //Wenn nicht Stummel
        mocked.when(MockedClass::methodB).thenCallRealMethod();

        //Lauf
        String actual_methodA = MockedClass.methodA();
        String actual_methodB = MockedClass.methodB();

        //Überprüfen Sie das Ergebnis
        assertEquals(expected_methodA, actual_methodA);
        assertEquals(expected_methodB, actual_methodB);
    }
}

Mockito.mockStatic () verspotten ThenReturn (), um den Rückgabewert festzulegen Wenn Sie die reale Sache aufrufen möchten, ohne den Rückgabewert festzulegen, thenCallRealMethod () Sie können verwenden.

Festlegen der statischen Methode

Im Beispielcode wird es durch die Methodenreferenz wie "MockedClass :: methodA" angegeben, aber die Beschreibungsmethode, wenn ein Argument vorhanden ist, lautet wie folgt.

mocked.when(() -> { MockedClass.methodC(Mockito.anyString()); })
      .thenReturn("stub");

Sie können any () von Mockito in der Argumentliste angeben. Natürlich ist der Lambda-Ausdruck auch dann gültig, wenn kein Argument vorliegt. {} Kann gemäß der Beschreibungsregel für Lambda-Ausdrücke weggelassen werden.

mocked.when(() -> MockedClass.methodA())
      .thenReturn("stub");

Recommended Posts

Verspotten Sie statische Methoden in Mockito 3.4
Verspotten Sie statische Methoden mit PowerMock
Änderungen in Mockito 2
Org.mockito.exceptions.misusing.InvalidUseOfMatchersException in Mockito
Überprüfen Sie das statische und öffentliche Verhalten in Java-Methoden
Mock Test de Mockito
Informationen zu Validierungsmethoden in JUnit
Mock and Stub in RSpec
Hilfsmethoden im Gerät verfügbar
Testen Sie private Methoden in JUnit
Testen Sie private Methoden in JUnit
Deaktivieren Sie den statischen Initialisierer in PowerMock
Informationen zu statischen und nicht statischen Java-Methoden
Unterschiede in den Split-Methoden von StringUtils
Häufig verwendete Methoden in Active Record
Verspotten Sie nur einige Methoden mit Spock
Ruby-Methoden, die häufig in Rails verwendet werden