2012-08-27 10 views
6

Bir sınıfla alamıyorum (PowerMock'un createMock yöntemini kullanarak). Bu sınıf yapıcısında ThreadSafeClientConnManager sınıfının bir nesnesini yaratıyor. Sınıf adımı geçerek createMock yöntemini çağırdığım satırda istisna yapıyorum. Aşağıda istisna yığını izi var. Ancak bir entegrasyon testi yürütürsem iyi çalışıyor. Sorun ne olabilir?ThreadSafeClientConnManager nesnesini oluşturan bir sınıfın alay edilmesi

[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) 

cevap

2

Sınıfın yapıcısında ThreadSafeClientConnManager'ı oluşturduğundan emin misiniz? Bunun yerine statik başlatıcıda yapıyor olabilir mi? Eğer durum buysa, o, test sınıfında "sınıfı" tanımına önce aşağıdaki iki ek not ekleyerek sorunu alabilirsiniz mesela:

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

Not kısmını gösteren ana başlatma içinde < clinit>, sınıfın statik başlatma süreci.

İlgili konular