【问题标题】:NoClassDefFound error while Running with PowerMock使用 PowerMock 运行时出现 NoClassDefFound 错误
【发布时间】:2017-07-17 18:38:53
【问题描述】:

我收到此错误:

java.lang.NoClassDefFoundError: org/powermock/reflect/proxyframework/ClassLoaderRegisterProxyFramework
    at org.powermock.tests.utils.impl.AbstractCommonTestSuiteChunkerImpl.registerProxyframework(AbstractCommonTestSuiteChunkerImpl.java:101)
    at org.powermock.tests.utils.impl.AbstractCommonTestSuiteChunkerImpl.chunkClass(AbstractCommonTestSuiteChunkerImpl.java:114)
    at org.powermock.tests.utils.impl.AbstractCommonTestSuiteChunkerImpl.<init>(AbstractCommonTestSuiteChunkerImpl.java:60)
    at org.powermock.tests.utils.impl.AbstractCommonTestSuiteChunkerImpl.<init>(AbstractCommonTestSuiteChunkerImpl.java:54)
    at org.powermock.tests.utils.impl.AbstractTestSuiteChunkerImpl.<init>(AbstractTestSuiteChunkerImpl.java:58)
    at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.<init>(JUnit4TestSuiteChunkerImpl.java:49)
    at org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.<init>(AbstractCommonPowerMockRunner.java:32)
    at org.powermock.modules.junit4.PowerMockRunner.<init>(PowerMockRunner.java:34)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
    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)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
    at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:33)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createUnfilteredTest(JUnit4TestLoader.java:84)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:70)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:43)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:444)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
Caused by: java.lang.ClassNotFoundException: org.powermock.reflect.proxyframework.ClassLoaderRegisterProxyFramework
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 25 more

我在 pom.xml 中添加了这些依赖项。我已经检查了类似实现的堆栈流并进行了全新安装。我的项目正在构建文件,但运行测试出错。我正在尝试运行 eclipse。

    <!-- Power Mock dependencies -->
            <dependency>
                <groupId>org.mockito</groupId>
                <artifactId>mockito-all</artifactId>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.powermock</groupId>
                <artifactId>powermock-api-mockito</artifactId>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.powermock</groupId>
                <artifactId>powermock-module-junit4</artifactId>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.powermock</groupId>
                <artifactId>powermock-module-junit4-legacy</artifactId>
                <version>1.7.0</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.powermock</groupId>
                <artifactId>powermock-reflect</artifactId>
                <version>1.7.0</version>
            </dependency>
            <dependency>
                <groupId>org.powermock</groupId>
                <artifactId>powermock-api-easymock</artifactId>
                <version>1.7.0</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.easymock</groupId>
                <artifactId>easymock</artifactId>
                <version>3.4</version>
                <scope>test</scope>
            </dependency>

我正在使用 PowerMockRunner 运行 java 类,并使用注解 InjectMock 注入我的测试类。然后使用 MockStatic 方法模拟静态类。另外,我添加了 PrepareForTest 注释并添加了在该位置具有静态方法的类。

我更新了我的代码并遵循了几个示例,但是这个错误即将到来。我做错了什么?

My code is like this. 
 class A{ 
void static method testA(String str){ .... do something; }
}

 class B{ 
     testB(String s) 
                 { A.testA(s); 
     }
 }

现在,当我尝试使用 PowerMockRunner 在我的 A 类上运行测试用例时。我在测试用例 @preparefortest({A.class}) @runwith(PowerMockRunner.class)

上给出了注释

【问题讨论】:

  • 我的代码是这样的。我有一个类似的代码 class A{ void static method testA(String str){ .... do something; } 类 B{ testB(String s) { A.testA(s);现在,当我尝试使用 PowerMockRunner 在我的 A 类上运行测试用例时。我在测试用例上给出了注释 @preparefortest({A.class}) @runwith(PowerMockRunner.class)
  • 进行了更改,谢谢。
  • 永远不要将更多信息放入 cmets。或者你能读一下第一条评论吗?我不能,我也不想。请编辑您的问题并添加所有缺失的部分!

标签: powermock


【解决方案1】:

我在使用 PowerMock 1.7.1 时看到了同样的错误。在没有显式依赖的情况下,maven 引入了 1.6.5 版的 powermock-core。添加对 powermock-core 版本 1.7.1 的显式依赖为我修复了此错误。

所以你的解决方案应该是添加对版本 1.7.0 的 powermock-core 的显式依赖:

<dependency>
    <groupId>org.powermock</groupId>
    <artifactId>powermock-core</artifactId>
    <version>1.7.0</version>
    <scope>test</scope>
</dependency>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-28
    • 1970-01-01
    • 2016-01-12
    • 2015-04-24
    • 1970-01-01
    • 2011-07-14
    相关资源
    最近更新 更多