Verspotten Sie statische Methoden aus mehreren Klassen mit PowerMock


102

Ich weiß, wie man statische Methoden aus einer Klasse mit PowerMock verspottet.
Aber ich möchte statische Methoden aus mehreren Klassen in einer Testklasse mit JUnit und PowerMock verspotten.

Kann mir jemand sagen, ob es möglich ist und wie es geht?


1
Sie tun dies genauso, wie Sie Methoden aus einzelnen Klassen verspotten. Wo steckst du fest?
Artbristol

Wenn Sie powermock verwenden, müssen Sie diese Anmerkung zur Testklasse @PrepareForTest (ClassThatContainsStaticMethod.class) hinzufügen. Wir können jedoch nicht mehrere Anmerkungen angeben. Wie geht das?
Neuling

Antworten:


254

Machen Sie es einfach @PrepareForTest({Class1.class,Class2.class})für mehrere Klassen.


11
Geschweifte Klammern! das hat mir gefehlt
Sudocoder

2
Vergessen Sie auch nicht, @RunWith(PowerMockRunner.class)auf Klassenebene zu PowerMockRunner zu wechseln
Nikita Barishok

1
@ NikitaBarishok nicht immer benötigt. Sie können stattdessen eine Regel definieren, um die obige Arbeit zu ermöglichen -@Rule public PowerMockRule rule = new PowerMockRule();
Aniket Thakur

5
in Kotlin@PrepareForTest(Class1::class, Class2::class))
Ryan

Es ist auch besser zu verwenden, @PrepareOnlyThisForTestanstatt @PrepareForTest. Letzteres modifiziert auch Superklassen, die normalerweise nicht benötigt werden.
www.Decompiler.com

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

etc...


Was PowerMock 1.6.5gibt es Probleme bei der Verwendung @PrepareForTestauf Verfahren Ebene (funktioniert nur auf Klassenebene für mich)
Nikita Barishok

2

In Java mit PowerMock / junit, Verwendung @PrepareForTest({})mit so vielen statischen Klassen , wie Sie als Array möchten ( {}).

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

}

Ich habe Powermock mit in Scala / Junit verwendet , da Scalatest nicht in Powermock integriert ist.

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

  @Test
  def test() {
  }
}

1

Wenn Sie Kotlin verwenden, lautet die Syntax wie folgt

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.