JDK8→11の移行でPowerMockが上手く動かなくなった時の対応方法
2019年にJavaの有償化になった話はIT業界に携わった人なら何となく聞いたことも多いでしょう。
この有償化に伴いJavaのバージョンアップに無償で商用利用できるOpenjdkへの移行をしているもしくはする予定のところも多いはず。
本テーマではJava11への移行時に間接的に移行せざるを得なくなったJavaのユニットテストによく使われる「PowerMock」の移行についてやったことを軽く書いていきたいと思います。
様々なところでOracle jdk8から
以下のプロパティを追加する
source/xxxxxxx/src/test/resources/org/powermock/extensions/configuration.properties
OpenJDK11でPowerMock継続利用のための暫定対処
JUnit5に完全移行+PowerMockの削除が完了した場合、プロパティファイルを削除する
powermock.global-ignore=com.sun.org.apache.xerces.,javax.xml.,org.xml.,org.w3c.,com.sun.org.apache.xalan.*
PowerMockで作成していたモックを移行
import org.eclipse.jdt.core.dom.AST; private AST ast; //SimpleName simpleName = PowerMockito.mock(SimpleName.class); SimpleName simpleName = ast.newSimpleName(“SID”);
Whiteboxの移行(Reflectionで対応)
import java.lang.reflect.Field; //import org.mockito.internal.util.reflection.Whitebox; //CommonUtils common = new CommonUtils(); //Whitebox.setInternalState(common, “existAnyFilesByPattern”, false); Field field = CommonUtils.class.getDeclaredField(“existAnyFilesByPattern”); field.setAccessible(true); field.set(field, false);
verifyStaticの移行
//PowerMockito.verifyStatic(PackageAnalyzer.class, Mockito.times(1)); Mockito.verify(packageAnalyzer, Mockito.times(1)).visit(node);
pom.xml
javax.xml.bind jaxb-api 2.3.1 org.glassfish.jaxb jaxb-runtime 2.3.0.1 runtime javax.activation javax.activation-api 1.2.0 xalan xalan 2.7.2 xml-apis xml-apis