繁体   English   中英

PowerMock & Java 11

[英]PowerMock & Java 11

我们在少数历史项目中使用了 PowerMock。 不幸的是,PowerMock 已经死了,并且与 Java 11 不兼容。

我们正在使用 mockStatic()。 是的,我们知道它被认为是有害的——它在遗留代码中,我们现在不想重写这些类……

是否有任何选项可以调整 PowerMock 以支持 Java 11? 或者是否可以用其他一些 Java 11 兼容框架轻松替换它? (Mockito 不支持 mockStatic)

在一年没有发布之后,PowerMock 的事情真的发生了变化。

PowerMock 2.0.0-RC1 发布。 并使用 PowerMockito 2.0.0-RC1 + @PowerMockIgnore({"com.sun.org.apache.xerces.*", "javax.xml.*", "org.xml.*", "org.w3c.*"})

这些测试在 Java 11 下工作。

解决了:

@PowerMockIgnore("jdk.internal.reflect.*")

其他什么都不需要。

如果有很多测试类要迁移到 Java 11,则可以在 org/powermock/entensions/configuration.properties 文件中只配置一次忽略:

powermock.global-ignore=com.sun.org.apache.xerces.*,javax.xml.*,org.xml.*,org.w3c.*

添加属性:org/powermock/extensions/configuration.properties

https://github.com/powermock/powermock/wiki/PowerMock-Configuration https://github.com/powermock/powermock-examples-maven/blob/master/global-ignore/src/test/resources/org/powermock /extensions/configuration.properties

例如对于 maven/gradle:src/test/resources/org/powermock/extensions/configuration.properties

powermock.global-ignore=javax.crypto.*,com.sun.xml.internal.stream.*,javax.xml.stream.*,javax.net.ssl.*,org.slf4j.*,javax.xml.parsers.*,ch.qos.logback.*,jdk.xml.internal.*,com.sun.org.apache.xerces.*,java.xml.*,org.xml.*,javax.management.*,org.w3c.dom.*

从 mockito 3.4.0 版开始,可以模拟静态方法。 您可以参考https://www.baeldung.com/mockito-mock-static-methods了解更多信息。

如果您使用 java 11,则将依赖项 org.power.mock 降级到 1.7.0。

如果在 JDK11 中使用 reflect,你可能会看到类似 'An illegal reflective access operation has occurred' 的警告,因为 reflect JDK 内部 API 从 JDK9 开始是非法的,你仍然可以在上面的警告下使用它。

要临时解决问题,请尝试在您的 argLing 中使用--add-exports--add-opens

例如: --add-opens java.xml/jdk.xml.internal=ALL-UNNAMED

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>3.0.0-M5</version>
  <configuration>
    <argLine>
      @{argLine} --add-opens java.xml/jdk.xml.internal=ALL-UNNAMED 
    </argLine>
  </configuration>
</plugin>

有关更多信息,请观看--add-opens 介绍

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM