Simule métodos estáticos de várias classes usando PowerMock

103

Eu sei como simular métodos estáticos de uma classe usando PowerMock.
Mas eu quero simular métodos estáticos de várias classes em uma classe de teste usando JUnit e PowerMock.

Alguém pode me dizer se é possível fazer isso e como fazer?

Novato
fonte
1
Você apenas faz isso da mesma maneira que simula métodos de classes únicas. Onde você está preso?
artbristol de
Ao usar o powermock, você precisa adicionar esta anotação à classe de teste @PrepareForTest (ClassThatContainsStaticMethod.class). Mas não podemos especificar várias anotações. Então, como fazê-lo?
Novato em

Respostas:

256

Basta fazer @PrepareForTest({Class1.class,Class2.class})para várias classes.

Artbristol
fonte
11
chaves! era isso que eu estava perdendo.
sudocoder
2
Também não se esqueça de mudar para PowerMockRunner @RunWith(PowerMockRunner.class)no nível de classe
Nikita Barishok
1
@NikitaBarishok nem sempre é necessário. Você pode definir uma regra para fazer o trabalho acima -@Rule public PowerMockRule rule = new PowerMockRule();
Aniket Thakur,
5
em kotlin@PrepareForTest(Class1::class, Class2::class))
Ryan
Também é melhor usar em @PrepareOnlyThisForTestvez de @PrepareForTest. O último também modifica as superclasses, o que normalmente não é necessário.
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
fonte
Quanto a PowerMock 1.6.5problemas de uso @PrepareForTestno nível do método (só funciona no nível da classe para mim)
Nikita Barishok
2

Em java com powermock / junit, use @PrepareForTest({})com quantas classes estáticas você quiser como array ( {}).

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

}

Usei o powermock com em scala / junit, pois o scalatest não tem integração com o powermock.

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

  @Test
  def test() {
  }
}
prayagupd
fonte
1

Se você estiver usando kotlin, a sintaxe é esta

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

Ezio
fonte