CodeGym /Kursy Java /Moduł 3 /Popularne scenariusze pracy z Mockito

Popularne scenariusze pracy z Mockito

Moduł 3
Poziom 4 , Lekcja 5
Dostępny

6.1 Wyśmiewanie metody statycznej mockStatic()

I jeszcze jeden ważny punkt to kpina i weryfikacja metod statycznych. „Co w tym złego?” – pytasz. Tak, statycznie, ale metody są takie same. I będziesz się mylił.

Pamiętasz, gdzie zaczęliśmy uczyć się o symulowanych obiektach? Ponieważ obiekty te są sztucznie tworzone przez DynamicProxy. A metody statyczne nie są powiązane z żadnymi obiektami i DynamicProxyniemożliwe jest przechwycenie wywołań do nich przez . To wszystko.

Ale i tu twórcy Mockito potrafili zrobić unik – napisali własny moduł ładujący klasy i z jego pomocą byli w stanie podmieniać klasy w locie. Duże i trudne zadanie, ale udało im się je wykonać.

Będziesz musiał dodać dodatkową bibliotekę do pom.xml:

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-inline</artifactId>
    <version>4.2.0</version>
    <scope>test</scope>
</dependency>

Oto jak pracować, jeśli chcesz kpić z metody statycznej.

1 Utwórz specjalny próbny obiekt klasy:

MockedStatic<ClassName>managerObject = Mockito.mockStatic(ClassName.class);

2 Dodaj zasady działania do tego obiektu:

Do tego przedmiotu reguły należy przylgnąć w inny sposób.

managerObject.when(ClassName::method name).thenReturn(result);

3 Pamiętaj , aby zawrzeć użycie tego obiektu,try-with-resources aby obiekt został natychmiast usunięty, a Mockito mógł wyczyścić powiązane z nim reguły.

Przykład:

@Test
void givenStaticMethodWithNoArgs () {
    try (MockedStatic< StaticUtils> utilities =  Mockito.mockStatic( StaticUtils.class)) {
        // add rule
         utilities.when(StaticUtils::name).thenReturn("Hello");

        // check if the rule works
        assertEquals("Hello", StaticUtils.name());
    }
}

Nie tak piękne jak z adnotacjami @Mocki @Spy, ale bardzo praktyczne. Bardzo trudno było pisać testy, gdy nie można było kpić z prostej metody statycznej, która była używana w testowanych metodach.

Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION