Junit/PowerMockito:java.lang.NoClassDefFoundError:javassist.CannotCompileException

Junit/PowerMockito:java.lang.NoClassDefFoundError:javassist.CannotCompileException,junit,mockito,powermockito,Junit,Mockito,Powermockito,运行junit测试时出现以下异常: java.lang.NoClassDefFoundError: javassist.CannotCompileException at java.lang.J9VMInternals.verifyImpl(Native Method) at java.lang.J9VMInternals.verify(J9VMInternals.java:85) at java.lang.J9VMInternals.initialize(J9VMInt

运行junit测试时出现以下异常:

java.lang.NoClassDefFoundError: javassist.CannotCompileException
    at java.lang.J9VMInternals.verifyImpl(Native Method)
    at java.lang.J9VMInternals.verify(J9VMInternals.java:85)
    at java.lang.J9VMInternals.initialize(J9VMInternals.java:162)
    at org.powermock.tests.utils.impl.AbstractTestSuiteChunkerImpl.createDefaultExtraMockTransformers(AbstractTestSuiteChunkerImpl.java:257)
    at org.powermock.tests.utils.impl.AbstractTestSuiteChunkerImpl.chunkClass(AbstractTestSuiteChunkerImpl.java:169)
    at org.powermock.tests.utils.impl.AbstractTestSuiteChunkerImpl.<init>(AbstractTestSuiteChunkerImpl.java:96)
    at org.powermock.tests.utils.impl.AbstractTestSuiteChunkerImpl.<init>(AbstractTestSuiteChunkerImpl.java:89)
    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:56)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:39)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:527)
    at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:31)
    at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:24)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
    at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:29)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
    at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:24)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.<init>(JUnit4TestReference.java:32)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestClassReference.<init>(JUnit4TestClassReference.java:25)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:41)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:31)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:452)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: java.lang.ClassNotFoundException: javassist.CannotCompileException
    at java.net.URLClassLoader.findClass(URLClassLoader.java:434)
    at java.lang.ClassLoader.loadClassHelper(ClassLoader.java:665)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:644)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:358)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:627)
    ... 28 more
我写了下面的测试类来测试EmployeeService:

@RunWith(PowerMockRunner.class)
@PrepareForTest(Employee.class)
public class EmployeeServiceTest {

  @Test
  public void testGetEmployeeCount() {

    PowerMockito.mockStatic(Employee.class);
    PowerMockito.when(Employee.count()).thenReturn(900);

    EmployeeService employeeService = new  EmployeeService();

    Assert.assertEquals(900,employeeService.getEmployeeCount());
  }

}
用于mockito和power mockito的依赖项如下所示:

  • mockito-all-1.10.19.jar
  • powermock-mockito-1.6.2-full.jar
  • objenesis-2.1.jar
  • cglib-nodep-2.2.2.jar
为了解决这个异常,我还将javassist-3.12.0.GA-sources.jar添加到类路径中,但没有帮助


但得到的异常如上所示。请帮帮我。

javassist-3.12.0.GA sources.jar
类似于包含源代码(java文本文件),而不是编译的java类文件。使用
jar tf javassist-3.12.0.GA sources.jar
调查并确保您包含一个包含
.class
文件的jar。

不客气!如果您希望“接受答案”表示您的问题已解决,请单击您希望接受的答案左侧的复选标记。
@RunWith(PowerMockRunner.class)
@PrepareForTest(Employee.class)
public class EmployeeServiceTest {

  @Test
  public void testGetEmployeeCount() {

    PowerMockito.mockStatic(Employee.class);
    PowerMockito.when(Employee.count()).thenReturn(900);

    EmployeeService employeeService = new  EmployeeService();

    Assert.assertEquals(900,employeeService.getEmployeeCount());
  }

}