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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です