2012-08-27 14 views
6

No puedo simular una clase (utilizando el método createMock de PowerMock). Esta clase está creando un objeto de la clase ThreadSafeClientConnManager en su constructor. Obtengo una excepción en la línea donde llamé al método createMock para pasar el nombre de mi clase. A continuación se muestra el seguimiento de la pila de excepciones. Sin embargo, funciona bien si ejecuto una prueba de integración. Cual podría ser el problema ?Burlarse de una clase que crea el objeto ThreadSafeClientConnManager

[junit] Caused by: java.lang.IllegalStateException: Failure initializing default SSL context 
[junit]  at org.apache.http.conn.ssl.SSLSocketFactory.createDefaultSSLContext(SSLSocketFactory.java:211) 
[junit]  at org.apache.http.conn.ssl.SSLSocketFactory.<init>(SSLSocketFactory.java:333) 
[junit]  at org.apache.http.conn.ssl.SSLSocketFactory.getSocketFactory(SSLSocketFactory.java:165) 
[junit]  at org.apache.http.impl.conn.SchemeRegistryFactory.createDefault(SchemeRegistryFactory.java:45) 
[junit]  at org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager.<init>(ThreadSafeClientConnManager.java:98) 
[junit]  at com.amazon.marketplace.payment.tsf.TSFClient.<init>(TSFClient.java:109) 
[junit]  at com.amazon.marketplace.payment.tsf.TSFClient.<clinit>(TSFClient.java:95) 
[junit] Caused by: java.security.NoSuchAlgorithmException: class configured for KeyManagerFactory: com.sun.net.ssl.internal.ssl.KeyManagerFactoryImpl$SunX509 not a KeyManagerFactory 
[junit]  at sun.security.jca.GetInstance.checkSuperClass(GetInstance.java:242) 
[junit]  at sun.security.jca.GetInstance.getInstance(GetInstance.java:221) 
[junit]  at sun.security.jca.GetInstance.getInstance(GetInstance.java:147) 
[junit]  at javax.net.ssl.KeyManagerFactory.getInstance(KeyManagerFactory.java:121) 
[junit]  at org.apache.http.conn.ssl.SSLSocketFactory.createSSLContext(SSLSocketFactory.java:184) 
[junit]  at org.apache.http.conn.ssl.SSLSocketFactory.createDefaultSSLContext(SSLSocketFactory.java:209) 

Respuesta

2

¿Estás seguro de que la clase está creando ThreadSafeClientConnManager en su constructor? ¿Podría hacerlo en un inicializador estático en su lugar? Si ese es el caso, podría obtener en torno a que mediante la adición de las dos anotaciones siguientes antes de la definición de "clase" en su clase de prueba, por ejemplo:

@RunWith(PowerMockRunner.class) 
@PrepareForTest(ClassUnderTest.class) 
public class YourTestClass { 

Nota del < clinit> en la inicialización de los padres, lo que indica parte de la el proceso de inicialización estática de la clase.

Cuestiones relacionadas