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?


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.


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


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() {
  }
}

1

Si vous utilisez kotlin, la syntaxe est la suivante

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.