Exceptions

將曾經遇過的問題與解決方式整理在這。

在使用SSL操作時會需要KeyManager,而產生KeyManager的instance則會透過KeyManagerFactory。然而在使用PowerMock時,由於PowerMock已載入Algorithm類別,造成Factory比較SuperClass失敗。

KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
參考Issue 288修改方式,使用@PowerMockIgnore({“javax.net.ssl.*”}):
@RunWith(PowerMockRunner.class)
@PrepareForTest({Example.class})
@PowerMockIgnore({"javax.net.ssl.*"})
public class TestExample {
...

這種例外算佔大多數。套用Spring一定會遇到,解法可參考這篇文章。後來我還有愈到的是com.sun.crypto.provider.HmacSHA1 cannot be cast to javax.crypto.MacSpi,面對這種問題大都可以使用@PowerMockIgnore解決,至於要Ignore哪些package或class可能要自行嘗試一下。

@RunWith(PowerMockRunner.class)
@PrepareForTest({Example.class})
@PowerMockIgnore({"com.sun.crypto.*", "javax.crypto.*"})
public class TestExample {
...

友藏內心的獨白: PowerMock是很方便,但要去Trace要Ignore的地方也花不少時間阿!