Java 模拟创建ThreadSafeClientConnManager对象的类

Java 模拟创建ThreadSafeClientConnManager对象的类,java,mocking,powermock,Java,Mocking,Powermock,我无法模拟类(使用PowerMock的createMock方法)。此类正在其构造函数中创建ThreadSafeClientConnManager类的对象。 我在调用createMock方法并传递类名的那一行遇到异常。 以下是异常堆栈跟踪。但是,如果我运行一个集成测试,它工作得很好。可能是什么问题 [junit] Caused by: java.lang.IllegalStateException: Failure initializing default SSL context [junit]

我无法模拟类(使用PowerMock的createMock方法)。此类正在其构造函数中创建ThreadSafeClientConnManager类的对象。 我在调用createMock方法并传递类名的那一行遇到异常。 以下是异常堆栈跟踪。但是,如果我运行一个集成测试,它工作得很好。可能是什么问题

[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)
[junit]原因:java.lang.IllegalStateException:初始化默认SSL上下文失败
[junit]位于org.apache.http.conn.ssl.SSLSocketFactory.createDefaultSSLContext(SSLSocketFactory.java:211)
[junit]位于org.apache.http.conn.ssl.SSLSocketFactory(SSLSocketFactory.java:333)
[junit]位于org.apache.http.conn.ssl.SSLSocketFactory.getSocketFactory(SSLSocketFactory.java:165)
[junit]位于org.apache.http.impl.conn.SchemeRegistryFactory.createDefault(SchemeRegistryFactory.java:45)
[junit]位于org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager.(ThreadSafeClientConnManager.java:98)
[junit]位于com.amazon.marketplace.payment.tsf.TSFClient.(TSFClient.java:109)
[junit]位于com.amazon.marketplace.payment.tsf.TSFClient.(TSFClient.java:95)
[junit]原因:java.security.nosuchalgorithException:为KeyManagerFactory配置的类:com.sun.net.ssl.internal.ssl.KeyManagerFactoryImpl$SunX509不是KeyManagerFactory
[junit]位于sun.security.jca.GetInstance.checkSuperClass(GetInstance.java:242)
[junit]位于sun.security.jca.GetInstance.GetInstance(GetInstance.java:221)
[junit]位于sun.security.jca.GetInstance.GetInstance(GetInstance.java:147)
[junit]位于javax.net.ssl.KeyManagerFactory.getInstance(KeyManagerFactory.java:121)
[junit]位于org.apache.http.conn.ssl.SSLSocketFactory.createSSLContext(SSLSocketFactory.java:184)
[junit]位于org.apache.http.conn.ssl.SSLSocketFactory.createDefaultSSLContext(SSLSocketFactory.java:209)

您认为这是系统类加载问题吗?尝试引用此链接,它可能会给您一些提示

您确定该类正在其构造函数中创建ThreadSafeClientConnManager吗?它可以在静态初始值设定项中执行吗?如果是这种情况,您可以通过在测试类中的“类”定义之前添加以下两个注释来避免这种情况,例如:

@RunWith(PowerMockRunner.class)
@PrepareForTest(ClassUnderTest.class)
public class YourTestClass {
注意父初始化中的,表示类的静态初始化过程的一部分