spring-boot powermock springjunit4classrunner

spring boot - No se puede ejecutar powermockrule con SpringJUnit4ClassRunner en el proyecto de arranque de primavera



spring-boot (1)

Tengo un proyecto de arranque de primavera que debe probarse con el corredor de pruebas de primavera (para que pueda obtener el contexto real de la aplicación) y simular el método estático.

@RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes= MyApplication.class) @PrepareForTest(StaticClass.class) public class StaticClassTest { @Rule public PowerMockRule rule = new PowerMockRule(); @Autowired HelloCmd hello; @Test public void testGetOne() { mockStatic(StaticClass.class); when(StaticClass.getNumber()).thenReturn(2); System.out.println(hello.getNumber()); } }

Y recibí el siguiente mensaje de error cuando ejecuté la prueba:

com.thoughtworks.xstream.converters.ConversionException: hello.hystrix.commands.HelloCmd$$EnhancerBySpringCGLIB$$a27be1be : hello.hystrix.commands.HelloCmd$$EnhancerBySpringCGLIB$$a27be1be ---- Debugging information ---- message : hello.hystrix.commands.HelloCmd$$EnhancerBySpringCGLIB$$a27be1be cause-exception : com.thoughtworks.xstream.mapper.CannotResolveClassException cause-message : hello.hystrix.commands.HelloCmd$$EnhancerBySpringCGLIB$$a27be1be class : hello.hystrix.commands.StaticClassTest required-type : hello.hystrix.commands.StaticClassTest converter-type : com.thoughtworks.xstream.converters.reflection.ReflectionConverter path : /org.powermock.modules.junit4.rule.PowerMockStatement$1/outer-class/fNext/next/next/target/hello line number : 15 class[1] : org.junit.internal.runners.statements.InvokeMethod class[2] : org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks class[3] : org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks class[4] : org.powermock.modules.junit4.rule.PowerMockStatement class[5] : org.powermock.modules.junit4.rule.PowerMockStatement$1 version : null

¿Cómo arreglar esto? ¡Gracias!


Encontré una solución desde aquí para usar PowerMockRunnerDelegate en lugar de PowerMockRule.

La clase de prueba actualizada sería:

@RunWith(PowerMockRunner.class) @PowerMockRunnerDelegate(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes= MyApplication.class) @PrepareForTest(StaticClass.class) public class StaticClassTest { @Autowired HelloCmd hello; @Test public void testGetOne() { mockStatic(StaticClass.class); when(StaticClass.getNumber()).thenReturn(2); System.out.println(hello.getNumber()); } }