將曾經遇過的問題與解決方式整理在這。
java.security.NoSuchAlgorithmException
在使用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 { ...
java.lang.ClassCastException
這種例外算佔大多數。套用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的地方也花不少時間阿!
留言
張貼留言