2012-08-27 2 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> 클래스의 정적 초기화 프로세스.

관련 문제