首页 > 解决方案 > 使用 JDK 11 的 PowerMockRule

问题描述

我正在使用 PowerMockRule 覆盖一个在 JDK 8 中运行良好的单元测试,但是当我使用 JDK 11 升级我的应用程序时,它开始未能通过单元测试。

我尝试了几个带有 power mock 的依赖组合,但对我没有任何效果。试图找出根本原因和解决方案。有人可以帮我解决这个问题吗?

安装 JDK 11 时出错

java.io.RuntimeException: java.io.IOException: Can not attach to current VM
at org.powermock.modules.agent.AgentLoader.attachToThisVM(AgentLoader.java:140)
at org.powermock.modules.agent.AgentLoader.loadAgent(AgentLoader.java:87)
at org.powermock.modules.agent.AgentInitialization.initializeAccordingToJDKVersion(AgentInitialization.java:40)

下面是一个简单的单元测试(不进行复杂的单元测试 - 但即使是简单的单元测试也会给出相同的错误)

class PowerMockSimpleSpec extend Specification {

  @Rule
  public PowerMockRule rule = new PowerMockRule()  

  def "one plus one should equal two"() {
    expect:
    1 + 1 == 2
  }
}

依赖项适用于 JDK 8,但不适用于 JDK 11

testImplementation group: 'org.powermock', name: 'powermock-module-junit4', version: '2.0.9'
testImplementation group: 'org.powermock', name: 'powermock-api-mockito2', version: '2.0.9'
testImplementation group: 'org.powermock', name: 'powermock-module-junit4-rule-agent', version: '2.0.9'

尝试通过添加以下依赖项但不是运气

testImplementation group: 'org.powermock', name: 'powermock-module-junit4', version: '2.0.9'
testImplementation group: 'org.powermock', name: 'powermock-module-junit4-rule', version: '2.0.9'
testImplementation group: 'org.powermock', name: 'powermock-classloading-xstream', version: '2.0.9'

在下面的文档中也提到过,但依赖关系也没有运气 https://github.com/powermock/powermock/wiki/PowerMockRule

标签: javaunit-testingjunitspockpowermock

解决方案


Looks like you need to add -Djdk.attach.allowAttachSelf=true

See https://github.com/powermock/powermock/issues/979#issuecomment-485678666


推荐阅读