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?

Neuling
quelle
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.

Artbristol
quelle
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...

arush436
quelle
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() {
  }
}
betenagupd
quelle
1

Wenn Sie Kotlin verwenden, lautet die Syntax wie folgt

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

Ezio
quelle