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?


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.


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


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

1

Se você estiver usando kotlin, a sintaxe é esta

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.