Yang ingin Anda lakukan adalah kombinasi dari bagian 1 dan semua dari 2.
Anda perlu menggunakan PowerMockito.mockStatic untuk mengaktifkan pemalsuan statis untuk semua metode statis suatu kelas. Ini berarti memungkinkan untuk menghentikan mereka menggunakan sintaks when-thenReturn.
Tetapi kelebihan 2-argumen dari mockStatic yang Anda gunakan menyediakan strategi default untuk apa yang harus dilakukan Mockito / PowerMock ketika Anda memanggil metode yang belum secara eksplisit dihentikan pada contoh tiruan.
Dari javadoc :
Membuat tiruan kelas dengan strategi tertentu sebagai jawaban atas interaksinya. Ini fitur yang cukup canggih dan biasanya Anda tidak membutuhkannya untuk menulis tes yang layak. Namun, ini dapat membantu saat bekerja dengan sistem lama. Ini adalah jawaban default sehingga hanya akan digunakan jika Anda tidak menghentikan pemanggilan metode.
The bawaan Strategi Stubbing default adalah untuk hanya nol kembali, 0 atau salah untuk objek, jumlah dan boolean metode dihargai. Dengan menggunakan overload 2-arg, Anda mengatakan "Tidak, tidak, tidak, secara default gunakan metode jawaban subkelas Answer ini untuk mendapatkan nilai default. Ini mengembalikan Long, jadi jika Anda memiliki metode statis yang mengembalikan sesuatu yang tidak kompatibel dengan Lama, ada masalah.
Sebagai gantinya, gunakan versi 1-arg dari mockStatic untuk mengaktifkan stubbing metode statis, lalu gunakan when-thenReturn untuk menentukan apa yang harus dilakukan untuk metode tertentu. Sebagai contoh:
import static org.mockito.Mockito.*;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
class ClassWithStatics {
public static String getString() {
return "String";
}
public static int getInt() {
return 1;
}
}
@RunWith(PowerMockRunner.class)
@PrepareForTest(ClassWithStatics.class)
public class StubJustOneStatic {
@Test
public void test() {
PowerMockito.mockStatic(ClassWithStatics.class);
when(ClassWithStatics.getString()).thenReturn("Hello!");
System.out.println("String: " + ClassWithStatics.getString());
System.out.println("Int: " + ClassWithStatics.getInt());
}
}
Metode statis bernilai String diberi stub untuk mengembalikan "Halo!", Sedangkan metode statis bernilai int menggunakan stub default, mengembalikan 0.
@PrepareForTest
anotasi harus menjadi kelas yang memanggil metode statis, bukan kelas di mana metode statis.@PrepareForTest(ClassWithStatics.class)
benar.