Подтвердить что ты не робот

mockito-тест не дает такой ошибки метода при запуске в качестве теста junit, но когда банки добавляются вручную при запуске путаницы, он работает хорошо

У меня возникла особая проблема. В основном, когда я запускаю свой тест Mockito/PowerMockito, например, "Run as Junit Test", он дает мне следующую ошибку:

java.lang.NoSuchMethodError: org.mockito.mock.MockCreationSettings.isUsingConstructor()Z
at org.mockito.internal.creation.instance.InstantiatorProvider.getInstantiator(InstantiatorProvider.java:10)
at org.powermock.api.mockito.internal.mockcreation.MockCreator.createMethodInvocationControl(MockCreator.java:110)
at org.powermock.api.mockito.internal.mockcreation.MockCreator.mock(MockCreator.java:58)
at org.powermock.api.mockito.PowerMockito.mock(PowerMockito.java:203)
at org.powermock.api.extension.listener.AnnotationEnabler.standardInject(AnnotationEnabler.java:106)
at org.powermock.api.extension.listener.AnnotationEnabler.beforeTestMethod(AnnotationEnabler.java:54)
at org.powermock.tests.utils.impl.PowerMockTestNotifierImpl.notifyBeforeTestMethod(PowerMockTestNotifierImpl.java:90)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.executeTest(PowerMockJUnit44RunnerDelegateImpl.java:292)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTestInSuper(PowerMockJUnit47RunnerDelegateImpl.java:127)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTest(PowerMockJUnit47RunnerDelegateImpl.java:82)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runBeforesThenTestThenAfters(PowerMockJUnit44RunnerDelegateImpl.java:282)
at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:86)
at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:49)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.invokeTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:207)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.runMethods(PowerMockJUnit44RunnerDelegateImpl.java:146)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$1.run(PowerMockJUnit44RunnerDelegateImpl.java:120)
at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:33)
at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:45)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.run(PowerMockJUnit44RunnerDelegateImpl.java:122)
at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.run(JUnit4TestSuiteChunkerImpl.java:106)
at org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.run(AbstractCommonPowerMockRunner.java:53)
at org.powermock.modules.junit4.PowerMockRunner.run(PowerMockRunner.java:59)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
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)

Я попытался добавить все необходимые банки в зависимости от maven, а также в пути сборки, но безрезультатно.

Тем не менее, я затем добавил банки в run configurations-> classpath-> пользовательские записи. Затем я провел тест, как обычно, и отобразил зеленую строку состояния, то есть он отлично работал.

Пожалуйста помоги мне с этим. Мне нужно пройти тест без этих неприятных изменений, которые повлияли бы на мою работу. Что я мог сделать так, чтобы я обычно выполнял тест, т.е. Не пропустил все пути для запуска конфигураций, а просто добавил банки в путь сборки и затем выполнил как тест junit?

4b9b3361

Ответ 1

Попробуйте Cntrl + Shift + T на экране вашего затмения. Проверьте, каковы ваши результаты. В идеале eclipse должен разрешать этот класс только из одной зависимости. Если вы получаете несколько результатов, вам может потребоваться добавить исключение для определенных зависимостей.

enter image description here

Также проверьте, можете ли вы выполнить свои тестовые примеры из командной строки. Если вы в состоянии это сделать, то это не проблема maven. Но если что-то не работает, проверьте свои зависимости.

Ответ 2

Для меня версия mockito создавала проблемы. Просто удалите зависимость mockito, если вы добавили явно в свой файл pom. Я просто удалил -

testCompile 'org.mockito:mockito-all:1.9.5' 

line из моего файла gradle. Позволяет разрешать мошенничество и добавлять зависимую от него зависимость от mockito, вместо того, чтобы вы принудительно добавляли один, который мог привести к конфликту.

Так что для меня зависимости -

testCompile "org.powermock:powermock-module-junit4:1.6.4"
testCompile "org.powermock:powermock-module-junit4-rule:1.6.4" 
testCompile "org.powermock:powermock-api-mockito:1.6.4" 
testCompile "org.powermock:powermock-classloading-xstream:1.6.4" 

кроме junit и других зависимостей lib, которые у вас могут быть.

Ответ 3

Ваша IDE должна быть синхронизирована с Maven, что вы делаете вручную, добавляя зависимости.

К сожалению, Eclipse не обеспечивает (или не делает) это поведение из-за-коробки (в отличие от IntelliJ, который синхронизируется без проблем).

Решение, которое раньше выполнялось с плагином Maven Eclipse, но, глядя на документы, кажется, последний способ сделать это с помощью плагина интеграции Eclipse Maven для среды IDE.

Ответ 4

Я думаю, что есть проблема с версией Mockito - я только что обновил код с -

testCompile group: 'org.mockito', name: 'mockito-all', version: '1.8.5'

в

testCompile group: 'org.mockito', name: 'mockito-all', version: '1.10.19'