Uso de PowerMock para simular una clase estática en una prueba de tranquilidad

¿Hay alguna manera de usar PowerMock con la tranquilidad que tengo, porque cuando bash probar una API RESTful con la tranquilidad que tengo?

Quiero PowerMock una llamada estática.

El código de operación:

@POST @Produces("application/json") @Consumes(MediaType.APPLICATION_JSON) public Response createEntity(@Context HttpHeaders hh, String body) { . . . String sec = MDI.check(Some_string, ..., ...); if (sec == null) throw ... return Response.... } 

Y la prueba:

 @RunWith(PowerMockRunner.class) @PrepareForTest(MDI.class) public class createSOTest { @Test public void testStatic() { mockStatic(MDI.class); expect(MDI.check(Some_string, ..., ...).andReturn(Some_String); replay(MDI.class) given(). contentType(ContentType.JSON). header("SomeHeader", "something"). body(root). when(). post("/"). then(). statusCode(...); } } 

El problema es que obtengo una excepción cuando la prueba intenta ejecutar el código de rest-assured ( given().... ):

 org.apache.http.conn.ssl.SSLInitializationException: class configured for SSLContext: sun.security.ssl.SSLContextImpl$TLS10Context not a SSLContext at org.apache.http.conn.ssl.SSLContexts.createDefault(SSLContexts.java:58) at org.apache.http.conn.ssl.SSLSocketFactory.getSocketFactory(SSLSocketFactory.java:162) at org.apache.http.impl.conn.SchemeRegistryFactory.createDefault(SchemeRegistryFactory.java:52) at org.apache.http.impl.client.AbstractHttpClient.createClientConnectionManager(AbstractHttpClient.java:305) at org.apache.http.impl.client.AbstractHttpClient.getConnectionManager(AbstractHttpClient.java:465) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90) at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:324) at org.codehaus.groovy.runtime.metaclass.MethodMetaProperty$GetBeanMethodMetaProperty.getProperty(MethodMetaProperty.java:73) at org.codehaus.groovy.runtime.callsite.GetEffectivePojoPropertySite.getProperty(GetEffectivePojoPropertySite.java:61) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGetProperty(AbstractCallSite.java:227) at com.jayway.restassured.internal.RequestSpecificationImpl.applyProxySettings(RequestSpecificationImpl.groovy:1794) 

Parece ser un problema con el PowerMockRunner.class .

Me encontré con el mismo problema y encontré la solución en este blog :

Esto está relacionado con la carga de texto SSLCOntext desde el cargador de clases ascendente, que es el de Power Mock cuando se ejecuta la prueba.

Solución: use la anotación @PowerMockIgnore en la parte superior de su clase de prueba:

@PowerMockIgnore (“javax.net.ssl. *”)

La respuesta de Oscar fue muy útil. Tuve que excluir múltiples espacios de nombres para que funcionara. Terminé haciéndolo pasar con esto:

 @PowerMockIgnore({"javax.management.*", "org.apache.http.conn.ssl.*", "com.amazonaws.http.conn.ssl.*", "javax.net.ssl.*"}) 

Esto no parece un problema de powermock. Limítelo eliminando la dependencia estática dentro del código bajo prueba temporalmente – apáguelo para que devuelva cualquier cosa. Intente la prueba de nuevo sin burlarse. Puede obtener el mismo error, en cuyo caso puede investigar ese error.

    Intereting Posts