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?
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.
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.
Respuestas:
Solo hazlo
@PrepareForTest({Class1.class,Class2.class})
para varias clases.fuente
@RunWith(PowerMockRunner.class)
en el nivel de clase@Rule public PowerMockRule rule = new PowerMockRule();
@PrepareForTest(Class1::class, Class2::class))
@PrepareOnlyThisForTest
lugar de@PrepareForTest
. Este último también modifica las superclases, lo que normalmente no es necesario.etc ...
fuente
PowerMock 1.6.5
hay problemas para usar@PrepareForTest
a nivel de método (solo funciona a nivel de clase para mí)En java con powermock / junit, utilícelo
@PrepareForTest({})
con tantas clases estáticas como desee como array ({}
).He usado powermock en scala / junit, ya que scalatest no tiene integración con powermock.
fuente
Si está utilizando kotlin, la sintaxis es esta
@PrepareForTest(ClassA::class, ClassB::class)
fuente