6.1 A statikus metódus kigúnyolása mockStatic()
És még egy fontos pont a statikus módszerek kigúnyolása és ellenőrzése. „Mi a baj ezzel?” – kérdezed. Igen, statikus, de a módszerek ugyanazok. És tévedni fog.
Emlékszel, hol kezdtünk tanulni a hamis tárgyakról? Mivel ezek az objektumok mesterségesen jönnek létre a DynamicProxy
. A statikus metódusok pedig nincsenek objektumokhoz kötve, és DynamicProxy
lehetetlen elfogni a hozzájuk érkező hívásokat . Ez minden.
De a Mockito készítői itt is ki tudtak kerülni - saját osztálybetöltőt írtak, és segítségével menet közben is tudták pótolni az órákat. Nagy és nehéz munka volt, de mégis sikerült.
Hozzá kell adnia egy további könyvtárat a következőhöz pom.xml
:
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-inline</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>
Így kell működnie, ha statikus módszert kell gúnyolnia.
1 Hozzon létre egy speciális hamis osztályobjektumot:
MockedStatic<ClassName>managerObject = Mockito.mockStatic(ClassName.class);
2 Műveleti szabályok hozzáadása ehhez az objektumhoz:
A szabály ezen tárgyához más módon is ragaszkodni kell.
managerObject.when(ClassName::method name).thenReturn(result);
3 Ügyeljen arra, hogy az objektum használatát becsomagolja,try-with-resources
hogy az objektum azonnal törlésre kerüljön, és a Mockito törölni tudja a hozzá tartozó szabályokat.
Példa:
@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());
}
}
Nem olyan szép, mint a megjegyzésekkel @Mock
és -val @Spy
, de nagyon praktikus. Nagyon nehéz volt teszteket írni, amikor lehetetlen volt kigúnyolni egy egyszerű statikus módszert, amelyet a tesztelt módszereken belül használtak.
GO TO FULL VERSION