2016-09-09 3 views
1

Я использую Powermock 1.6.3 с Javassist 3.18.2-GA, Mockito 1.10.19, JUnit 4.11 и JDK1.8. Я не писал тесты или тестовые классы, и поэтому я не очень хорошо знаком с этими библиотеками. Не было никаких проблем с JDK1.7. Мне была назначена задача поднятия приложения на JDK1.8, и именно тогда я столкнулся с этой ошибкой. Кроме того, ошибки возникают только в тех тестовых классах, которые имитируют классы, которые имеют статические методы или имеют методы, которые вызывают статические методы (тестовые классы, которые используют метод PowerMockito.mockStatic()). Я потратил много времени на эту проблему, и я чувствую, что дошел до тупика. Любая помощь будет высоко ценится. Вот трассировка стека ошибки:Powermock 1.6.3 с Javassist 3.18.2-GA производит NoSuchMethodError

java.lang.NoSuchMethodError: javassist.CtMethod.hasAnnotation(Ljava/lang/Class;)Z 
at org.powermock.core.transformers.impl.TestClassTransformer.removeTestAnnotationsForTestMethodsThatRunOnOtherClassLoader(TestClassTransformer.java:185) 
at org.powermock.core.transformers.impl.TestClassTransformer.transform(TestClassTransformer.java:198) 
at org.powermock.core.classloader.MockClassLoader.loadMockClass(MockClassLoader.java:250) 
at org.powermock.core.classloader.MockClassLoader.loadModifiedClass(MockClassLoader.java:179) 
at org.powermock.core.classloader.DeferSupportingClassLoader.loadClass(DeferSupportingClassLoader.java:70) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
at java.lang.Class.forName0(Native Method) 
at java.lang.Class.forName(Class.java:348) 
at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.createDelegatorFromClassloader(JUnit4TestSuiteChunkerImpl.java:145) 
at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.createDelegatorFromClassloader(JUnit4TestSuiteChunkerImpl.java:40) 
at org.powermock.tests.utils.impl.AbstractTestSuiteChunkerImpl.createTestDelegators(AbstractTestSuiteChunkerImpl.java:244) 
at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.<init>(JUnit4TestSuiteChunkerImpl.java:61) 
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:423) 
at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:29) 
at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:21) 
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:26) 
at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:51) 
at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:123) 
at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:104) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:498) 
at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:164) 
at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:110) 
at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:175) 
at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcessWhenForked(SurefireStarter.java:107) 
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:68) 

P.S. Я пробовал много разных комбинаций Javassist и Powermock, и все они привели к ошибкам.

+1

И, наконец, вы можете задать свой вопрос в группах Google, у людей с полномочиями есть своя группа. Лучший шанс получить разумную обратную связь! – GhostCat

ответ

2

Power Mock 1.6.3 is compiled against Javassist 3.20.0-GA. Если это приводит к NoSuchMethodError, убедитесь, что никакая другая библиотека на пути к вашему классу не требует более новой версии Javassist.

+0

Большое вам спасибо! Построил путь к классу и нашел другую библиотеку, используя Javassist 3.4.GA. Сейчас работает отлично. –

Смежные вопросы