模拟一个创建ThreadSafeClientConnManager对象的类

6

我无法模拟一个类(使用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)
2个回答

2

你确定这个类在构造函数中创建了ThreadSafeClientConnManager吗?它可能是在静态初始化器中创建的吗?如果是这种情况,你可以在测试类的"class"定义之前添加以下两个注释来解决问题:

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

请注意父类初始化中的<clinit>,这表示该类的静态初始化过程的一部分。

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接