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

2 に答える 2

2

クラスがそのコンストラクターで ThreadSafeClientConnManager を作成していることは確かですか? 代わりに静的初期化子でそれを行うことはできますか? その場合は、テスト クラスの「クラス」定義の前に次の 2 つの注釈を追加することで回避できます。たとえば、次のようになります。

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

親の初期化の <clinit> に注意してください。これは、クラスの静的初期化プロセスの一部を示しています。

于 2012-09-06T00:00:00.130 に答える
2

システムクラスの読み込みの問題だと思いますか? このリンクを参照してみてください。いくつかの指針が得られるかもしれません。http://code.google.com/p/powermock/wiki/MockSystem

于 2012-08-30T13:52:41.877 に答える