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?


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.


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


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

1

Si está utilizando kotlin, la sintaxis es esta

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.