Méthodes statiques simulées à partir de plusieurs classes à l'aide de PowerMock

103

Je sais comment simuler les méthodes statiques d'une classe à l'aide de PowerMock.
Mais je veux me moquer des méthodes statiques de plusieurs classes dans une classe de test en utilisant JUnit et PowerMock.

Quelqu'un peut-il me dire est-il possible de faire cela et comment le faire?

Débutant
la source
1
Vous le faites simplement de la même manière que vous simulez des méthodes à partir de classes uniques. Où es-tu coincé?
artbristol
Lorsque vous utilisez powermock, vous devez ajouter cette annotation à la classe de test @PrepareForTest (ClassThatContainsStaticMethod.class). Mais nous ne pouvons pas spécifier plusieurs annotations. Alors comment faire?
Débutant

Réponses:

257

Faites juste @PrepareForTest({Class1.class,Class2.class})pour plusieurs classes.

artbristol
la source
11
accolades! c'est ce qui me manquait.
sudocoder
2
N'oubliez pas non plus de passer à PowerMockRunner avec @RunWith(PowerMockRunner.class)au niveau de la classe
Nikita Barishok
1
@NikitaBarishok n'est pas toujours nécessaire. Vous pouvez définir une règle à la place pour faire fonctionner ci-dessus -@Rule public PowerMockRule rule = new PowerMockRule();
Aniket Thakur
5
à kotlin@PrepareForTest(Class1::class, Class2::class))
Ryan
Il est également préférable d'utiliser @PrepareOnlyThisForTestau lieu de @PrepareForTest. Ce dernier modifie également les superclasses, ce qui n'est normalement pas nécessaire.
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
la source
Quant à l' PowerMock 1.6.5utilisation @PrepareForTestau niveau de la méthode, il y a des problèmes (ne fonctionne qu'au niveau de la classe pour moi)
Nikita Barishok
2

En java avec powermock / junit, utilisez @PrepareForTest({})autant de classes statiques que vous le souhaitez que array ( {}).

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

}

J'ai utilisé powermock avec dans scala / junit, car scalatest n'a pas d'intégration avec powermock.

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

  @Test
  def test() {
  }
}
prier
la source
1

Si vous utilisez kotlin, la syntaxe est la suivante

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

Ezio
la source