Simulacros de métodos estáticos de varias clases con PowerMock

103

Sé cómo simular métodos estáticos de una clase usando PowerMock.
Pero quiero simular métodos estáticos de múltiples clases en una clase de prueba usando JUnit y PowerMock.

¿Alguien puede decirme si es posible hacer esto y cómo hacerlo?

Novato
fuente
1
Simplemente hazlo de la misma manera que te burlas de los métodos de clases individuales. ¿Dónde estás atrapado?
artbristol
Cuando use powermock, debe agregar esta anotación a la clase de prueba @PrepareForTest (ClassThatContainsStaticMethod.class). Pero no podemos especificar varias anotaciones. Así que ¿cómo se hace?
Novato

Respuestas:

256

Solo hazlo @PrepareForTest({Class1.class,Class2.class})para varias clases.

Artbristol
fuente
11
tirantes rizados! eso es lo que me estaba perdiendo.
sudocoder
2
Además, no olvide cambiar a PowerMockRunner @RunWith(PowerMockRunner.class)en el nivel de clase
Nikita Barishok
1
@NikitaBarishok no siempre es necesario. En su lugar, puede definir una regla para que funcione lo anterior -@Rule public PowerMockRule rule = new PowerMockRule();
Aniket Thakur
5
en kotlin@PrepareForTest(Class1::class, Class2::class))
Ryan
También es mejor usar en @PrepareOnlyThisForTestlugar de @PrepareForTest. Este último también modifica las superclases, lo que normalmente no es necesario.
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
fuente
En cuanto a que PowerMock 1.6.5hay problemas para usar @PrepareForTesta nivel de método (solo funciona a nivel de clase para mí)
Nikita Barishok
2

En java con powermock / junit, utilícelo @PrepareForTest({})con tantas clases estáticas como desee como array ( {}).

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

}

He usado powermock en scala / junit, ya que scalatest no tiene integración con powermock.

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

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

Si está utilizando kotlin, la sintaxis es esta

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

Ezio
fuente