6.1 Mengejek kaedah statik mockStatic()
Dan satu lagi perkara penting ialah mengejek dan mengesahkan kaedah statik. "Apa yang salah dengan itu?" anda bertanya. Ya, statik, tetapi kaedah adalah sama. Dan anda akan salah.
Ingat di mana kita mula belajar tentang objek olok-olok? Oleh kerana objek ini dicipta secara buatan melalui DynamicProxy
. Dan kaedah statik tidak terikat kepada mana-mana objek dan DynamicProxy
adalah mustahil untuk memintas panggilan kepada mereka melalui . Itu sahaja.
Tetapi pencipta Mockito dapat mengelak di sini juga - mereka menulis pemuat kelas mereka sendiri dan dengan bantuannya mereka dapat menggantikan kelas dengan cepat. Satu kerja yang besar dan sukar, tetapi mereka masih berjaya melakukannya.
Anda perlu menambah perpustakaan tambahan kepada pom.xml
:
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-inline</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>
Berikut ialah cara untuk bekerja jika anda perlu mengejek kaedah statik.
1 Buat objek kelas olok-olok khas:
MockedStatic<ClassName>managerObject = Mockito.mockStatic(ClassName.class);
2 Tambahkan peraturan operasi pada objek ini:
Kepada objek peraturan ini adalah perlu untuk berpaut dengan cara lain.
managerObject.when(ClassName::method name).thenReturn(result);
3 Pastikan anda membalut penggunaan objek initry-with-resources
supaya objek itu dipadamkan serta-merta dan Mockito boleh mengosongkan peraturan yang berkaitan dengannya.
Contoh:
@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());
}
}
Tidak secantik dengan anotasi @Mock
dan @Spy
, tetapi sangat praktikal. Sangat sukar untuk menulis ujian apabila mustahil untuk mengejek kaedah statik mudah yang digunakan dalam kaedah yang diuji.
GO TO FULL VERSION