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?

Pemula
sumber
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.

artbristol
sumber
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 ...

arush436
sumber
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() {
  }
}
prayagupd.dll
sumber
1

Jika Anda menggunakan kotlin, sintaksnya adalah ini

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

Ezio
sumber