Java >> Java tutorial >  >> Tag >> static

Mock statisk metode ved hjælp af JMockit

1. Oversigt

Nogle populære hånende biblioteker såsom Mockito og Easymock genererer mock-ups ved at drage fordel af Javas arvebaserede klassemodel. EasyMock implementerer en grænseflade ved kørsel, hvorimod Mockito arver fra målklassen for at skabe en spottende stub.

Ingen af ​​metoderne fungerer godt for statiske metoder, da statiske metoder er knyttet til en klasse og ikke kan tilsidesættes. Men JMockit giver en statisk metode til at håne funktioner.

I dette selvstudie vil vi udforske nogle af disse funktioner.

For en introduktion til JMockit, se venligst vores tidligere artikel.

2. Maven Dependencies

Lad os starte med Maven-afhængigheder:

<dependency>
    <groupId>org.jmockit</groupId>
    <artifactId>jmockit</artifactId>
    <version>1.24</version>
    <scope>test</scope>
</dependency>

Du kan finde de seneste versioner af disse biblioteker på Maven Central.

3. Statisk metode kaldet fra ikke-statisk metode 

Lad os først overveje et tilfælde, hvor vi har en klasse med en ikke-statisk metode, der internt afhænger af statisk metode :

public class AppManager {

    public boolean managerResponse(String question) {
        return AppManager.isResponsePositive(question);
    }

    public static boolean isResponsePositive(String value) {
        if (value == null) {
            return false;
        }
        int length = value.length();
        int randomNumber = randomNumber();
        return length == randomNumber ? true : false;
    }

    private static int randomNumber() {
        return new Random().nextInt(7);
    }
}

Nu vil vi teste metoden managerResponse(). Da dens returværdi afhænger af en anden metode, er vi nødt til at håne isResponsePositive() metode.

Vi kan håne denne statiske metode ved at bruge JMockits anonym klasse mockit.MockUp.MockUp (hvor T er klassenavnet ) og @Mock  anmærkning:

@Test
public void givenAppManager_whenStaticMethodCalled_thenValidateExpectedResponse() {
    new MockUp<AppManager>() {
        @Mock
        public boolean isResponsePositive(String value) {
            return false;
        }
    };

    assertFalse(appManager.managerResponse("Some string..."));
}

Her håner vi isResponsePositive() med en returværdi, som vi gerne vil bruge til testen. Derfor verificerer du det forventede resultat ved hjælp af påstande hjælpeprogram tilgængeligt i Junit-5.

4. Test privat statisk metode

I nogle få tilfælde bruger andre metoder private statiske metoder fra klassen:

private static Integer stringToInteger(String num) {
    return Integer.parseInt(num);
}

For at teste en sådan metode skal vi håne den private statiske metode . Vi kan bruge Deencapsulation.invoke()  hjælpemetode leveret af JMockit :

@Test
public void givenAppManager_whenPrivateStaticMethod_thenValidateExpectedResponse() {
    int response = Deencapsulation.invoke(AppManager.class, "stringToInteger", "110");
    assertEquals(110, response);
}

Som navnet antyder, er dets formål at de-indkapsle et objekts tilstand. På denne måde forenkler JMockit testmetoder, der ellers ikke kunne testes.

5. Konklusion

I denne artikel har vi set, hvordan statiske metoder kan hånes ved hjælp af JMockit . For et mere dybtgående kig på nogle af de avancerede funktioner i JMockit, tag et kig på vores artikel om JMockit Advanced Usage.

Som sædvanlig er den fulde kildekode til denne tutorial tilgængelig på GitHub.


Java tag