PowerMockを使用して複数のクラスの静的メソッドをモックする


103

PowerMockを使用してクラスから静的メソッドをモックする方法を知っています。
しかし、JUnitとPowerMockを使用して、テストクラスの複数のクラスの静的メソッドをモックしたいと思います。

これを行うことは可能であり、それを行う方法は誰かに教えてもらえますか?


1
単一のクラスからメソッドをモックするのと同じ方法でそれを行います。どこに行き詰まっていますか?
artbristol 2012

powermockを使用するときは、このアノテーションをテストクラス@PrepareForTest(ClassThatContainsStaticMethod.class)に追加する必要があります。ただし、複数のアノテーションを指定することはできません。それを行うにはどうすればよいですか?
初心者

回答:


256

@PrepareForTest({Class1.class,Class2.class})複数のクラスのためだけに行います。


11
中かっこ!それは私が欠けていたものです。
sudocoder 2014年

2
また@RunWith(PowerMockRunner.class)、クラスレベルでPowerMockRunnerに切り替えることを忘れないでください
Nikita Barishok

1
@NikitaBarishokは必ずしも必要ではありません。代わりにルールを定義して、上記を機能させることができます@Rule public PowerMockRule rule = new PowerMockRule();
Aniket Thakur

5
コトリン@PrepareForTest(Class1::class, Class2::class))
ライアン

@PrepareOnlyThisForTest代わりに使用することもお勧めします@PrepareForTest。後者は、通常必要とされないスーパークラスも変更します。
www.Decompiler.com 2017

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

等...


用としてPowerMock 1.6.5使用して問題がある@PrepareForTestメソッドレベルで(私だけのためのクラスレベルで動作)
ニキータBarishok

2

powermock / junitを 使用するJavaでは、@PrepareForTest({})配列({})と同じ数だけ静的クラスを使用します。

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

}

scalatestはpowermockと統合されていないため私はscala / junitでpowermockを使用しました。

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

  @Test
  def test() {
  }
}

1

kotlinを使用している場合、構文はこれです

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.