2012-08-27 68 views
6

我無法模擬一個類(使用PowerMock的createMock方法)。該類正在其構造函數中創建ThreadSafeClientConnManager類的對象。 我在我通過我的類名稱調用createMock方法的那一行得到異常。 以下是異常堆棧跟蹤。但是,如果我運行集成測試,它工作正常。可能是什麼問題 ?嘲笑創建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) 

回答

2

您確定該類正在其構造函數中創建ThreadSafeClientConnManager嗎?它可以在靜態初始化器中完成嗎?如果是這樣的話,你可能會圍繞在你的測試類的「類」的定義之前加入以下兩個註解,例如:

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

注意< clinit>父初始化,顯示部分類的靜態初始化過程。