PowerMock 和 Mockito 无法与 JDK 17 一起使用

问题描述 投票:0回答:1

我正在 JDK 17 中使用 PowerMockito 和 Mockito 作为 Junit(4) 测试类。但它不起作用。使用以下依赖项:

powermock版本 - 1.7.4, Mockito - 1.10.19

使用 Powermock 时会抛出初始化错误。对于mockito,它会抛出这些错误:

org.objenesis.ObjenesisException: java.lang.reflect.InvocationTargetException
    at org.objenesis.instantiator.sun.SunReflectionFactoryHelper.newConstructorForSerialization(SunReflectionFactoryHelper.java:54)
    at org.objenesis.instantiator.sun.SunReflectionFactoryInstantiator.<init>(SunReflectionFactoryInstantiator.java:41)
    at org.objenesis.strategy.StdInstantiatorStrategy.newInstantiatorOf(StdInstantiatorStrategy.java:68)
    at org.objenesis.ObjenesisBase.getInstantiatorOf(ObjenesisBase.java:94)
    at org.powermock.reflect.internal.WhiteboxImpl.newInstance(WhiteboxImpl.java:259)
    at org.powermock.reflect.Whitebox.newInstance(Whitebox.java:139)
    at org.powermock.tests.utils.impl.AbstractTestSuiteChunkerImpl.getPowerMockTestListenersLoadedByASpecificClassLoader(AbstractTestSuiteChunkerImpl.java:95)
    at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.createDelegatorFromClassloader(JUnit4TestSuiteChunkerImpl.java:174)
    at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.createDelegatorFromClassloader(JUnit4TestSuiteChunkerImpl.java:48)
    at org.powermock.tests.utils.impl.AbstractTestSuiteChunkerImpl.createTestDelegators(AbstractTestSuiteChunkerImpl.java:108)
    at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.<init>(JUnit4TestSuiteChunkerImpl.java:71)
    at org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.<init>(AbstractCommonPowerMockRunner.java:36)
    at org.powermock.modules.junit4.PowerMockRunner.<init>(PowerMockRunner.java:34)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
    at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:104)
    at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:86)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
    at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26)

有人可以建议任何解决方案吗?

mockito junit4 powermock
1个回答
0
投票

powermock 的最后一个版本是在 2020 年发布的,所以不确定它是否正在积极维护。 v1.7.x 的 powermock 不适用于 JDK 11+。此外,最新版本的mockito支持模拟静态方法,因此使用powermock不再具有真正的价值。

您应该删除 powermock 依赖项并升级到支持模拟静态类/方法的最新mockito 4.x。

不过,在理想的世界中,您不需要模拟静态类/方法。如果必须的话,那么是时候重构代码了。

© www.soinside.com 2019 - 2024. All rights reserved.