Mock metode statis dari beberapa kelas menggunakan PowerMock


103

Saya tahu cara meniru metode statis dari kelas menggunakan PowerMock.
Tapi saya ingin meniru metode statis dari beberapa kelas di kelas pengujian menggunakan JUnit dan PowerMock.

Adakah yang bisa memberi tahu saya apakah mungkin melakukan ini dan bagaimana melakukannya?


1
Anda hanya melakukannya dengan cara yang sama Anda meniru metode dari satu kelas. Di mana Anda terjebak?
artbristol

Saat menggunakan powermock, Anda perlu menambahkan anotasi ini ke kelas pengujian @PrepareForTest (ClassThatContainsStaticMethod.class). Tetapi kami tidak dapat menentukan beberapa anotasi. Jadi bagaimana melakukannya?
Pemula

Jawaban:


257

Lakukan saja @PrepareForTest({Class1.class,Class2.class})untuk beberapa kelas.


11
kurung kurawal! itulah yang saya lewatkan.
sudocoder

2
Juga jangan lupa untuk beralih ke PowerMockRunner dengan @RunWith(PowerMockRunner.class)di level kelas
Nikita Barishok

1
@NikitaBarishok tidak selalu dibutuhkan. Anda dapat menetapkan aturan sebagai gantinya untuk membuat di atas berfungsi -@Rule public PowerMockRule rule = new PowerMockRule();
Aniket Thakur

5
di kotlin@PrepareForTest(Class1::class, Class2::class))
Ryan

Ini juga lebih baik untuk digunakan @PrepareOnlyThisForTestdaripada @PrepareForTest. Yang terakhir juga memodifikasi superclass, yang biasanya tidak diperlukan.
www.Decompiler.com

12
@Test
 @PrepareForTest({Class1.class, Class2.class})
 public final void handleScript() throws Exception {
    PowerMockito.mockStatic(Class1.class);
    PowerMockito.mockStatic(Class2.class);

dll ...


Adapun PowerMock 1.6.5ada masalah menggunakan @PrepareForTestpada tingkat metode (hanya bekerja pada tingkat kelas untuk saya)
Nikita Barishok

2

Di java dengan powermock / junit, gunakan @PrepareForTest({})kelas statis sebanyak yang Anda inginkan seperti array ( {}).

@RunWith(PowerMockRunner.class)
@PrepareForTest({XmlConverterA.class, XmlConverterB.class})
class TransfersServiceExceptionSpec {

}

Saya telah menggunakan powermock dengan di scala / junit, karena scalatest tidak memiliki integrasi dengan powermock.

@RunWith(classOf[PowerMockRunner])
@PrepareForTest(Array(classOf[XmlConverterA], classOf[XmlConverterB]))
class TransfersServiceExceptionSpec {

  @Test
  def test() {
  }
}

1

Jika Anda menggunakan kotlin, sintaksnya adalah ini

@PrepareForTest(ClassA::class, ClassB::class)

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.