2014-11-25 4 views
11

Я пытаюсь издеваться конструктор, используя PowerMockito, но каждый раз, когда я бегу тест я получаю следующее сообщение об ошибке:PowerMock бросает NoSuchMethodError (setMockName)

java.lang.NoSuchMethodError: org.mockito.internal.creation.MockSettingsImpl.setMockName(Lorg/mockito/mock/MockName;)Lorg/mockito/internal/creation/settings/CreationSettings; 
at org.powermock.api.mockito.internal.mockcreation.MockCreator.createMethodInvocationControl(MockCreator.java:107) 
at org.powermock.api.mockito.internal.mockcreation.MockCreator.mock(MockCreator.java:60) 
at org.powermock.api.mockito.internal.expectation.DefaultConstructorExpectationSetup.createNewSubstituteMock(DefaultConstructorExpectationSetup.java:105) 
at org.powermock.api.mockito.internal.expectation.DefaultConstructorExpectationSetup.withAnyArguments(DefaultConstructorExpectationSetup.java:71) 

У меня есть следующие зависимости PowerMock в моем проекте:

  • org.powermock: powermock-модуль-junit4: 1.5.6
  • org.powermock: powermock-Mockito-релиз-полный: 1.5.6

Я проследил дерево зависимостей моего проекта и зафиксировал конфликты, чтобы mockito-all:1.9.5 был включен в сборку.

+0

Можете ли вы соответствовать [ эту настройку] (https://code.google.com/p/powermock/wiki/Mockito_maven) и посмотреть, исправляет ли она проблему –

+0

Это то, что я использовал изначально, но он генерирует ту же ошибку. –

+0

Возможно, вам следует добавить полное дерево зависимостей –

ответ

7

Моя проблема возникла из-за противоречивых версий javassist в моих транзитных зависимостях. То, что я сделал, это поиск всех зависимостей, которые ставят старую версию javassist в сборке, а затем исключают их. Например:

<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-entitymanager</artifactId> 
    <version>3.5.1-Final</version> 
    <scope>provided</scope> 
    <exclusions> 
     <exclusion> 
      <groupId>javassist</groupId> 
      <artifactId>javassist</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 
+0

Как я могу найти - какие зависимости используют старую версию javaassist? BDW Я использую gradle ... please guide –

+0

Вы можете использовать задачу ': dependencies' в Gradle, чтобы узнать, какие из них используют javassist. Для поиска можно использовать утилиты, такие как grep, меньше и т. Д.Когда вы обнаружите, какие из них его используют, исключите их и повторите процесс, пока не исключите все javassist (транзитивные) зависимости. Затем либо работайте назад, пока не получите версию javassist, которая вам нужна из другой зависимости, или добавьте версию, которую вы хотите, как зависимость явно. Вот как бы я это сделал. –

1

Для меня в Eclipse исправление этой проблемы было обнаружено в Java Build Path. Перейдите на вкладку «Заказ и экспорт». Переместить библиотеки веб-приложений на внизу. Обратите внимание, что при необходимости это также позволит вам просматривать источники сторонних библиотек, когда Eclipse сообщает вам, что источник не найден.

4

Я имел

org.mockito mockito-all 1.8.4

добавил к моей pom.xml кроме dependecies powermock, удаляя это работало для меня.

+1

Спасибо, что исправил это для меня - в основном, если вы используете Powermock, вы должны позволить Powermock определить зависимости для Mockito, а не переопределять их потенциально устаревшей версией. – PaulNUK

+0

Это был правильный ответ. Имея Powermock и mockito, все конфликтуют. – sinisterrook

+0

Работал и для меня тоже, не добавляйте явно mockito. Пусть powermock загружает и разрешает зависимость на основе ее версии. –

0

В моем случае это была конфликтная зависимость. я был исправить это после того, как исключить Mockito-ядерный артефакт:

<dependency> 
     <groupId>com.googlecode.catch-exception</groupId> 
     <artifactId>catch-exception</artifactId> 
     <exclusions> 
      <exclusion> 
       <groupId>org.mockito</groupId> 
       <artifactId>mockito-core</artifactId> 
      </exclusion> 
     </exclusions> 
     <version>1.0.4</version> 
     <scope>test</scope> 
    </dependency> 
32

Убедитесь, что powermockito и mockito версии выровнены как в этой версии графика - MockitoUsage#supported-versions,

Mockito      | PowerMock 
------------------------------------------------------------------------------ 
2.0.0-beta - 2.0.42-beta | 1.6.5+ 
------------------------------------------------------------------------------ 
1.10.19      | 1.6.4 
1.10.8 - 1.10.x    | 1.6.2+ 
1.9.5-rc1 - 1.9.5   | 1.5.0 - 1.5.6 
1.9.0-rc1 & 1.9.0   | 1.4.10 - 1.4.12 
1.8.5      | 1.3.9 - 1.4.9 
1.8.4      | 1.3.7 & 1.3.8 
1.8.3      | 1.3.6 
1.8.1 & 1.8.2    | 1.3.5 
1.8       | 1.3 
1.7       | 1.2.5 

Легкий способ найти mockito и powermock-mockito версия с использованием maven is,

mvn dependency:tree | grep mockito 
[INFO] | \- org.mockito:mockito-core:jar:1.8.5:compile 
[INFO] +- org.mockito:mockito-all:jar:1.8.5:compile 
[INFO] +- org.powermock:powermock-api-mockito:jar:1.4.9:compile 

Проблема может быть конфликтующие версии mockito в применении и тот, который powermockito использует, конфликтует, как показано ниже в моем случае, когда я использую powermock 1.6.5, который не поддерживает mockito 1.8.5

mvn clean dependency:tree | grep mockito 
[INFO] +- org.mockito:mockito-all:jar:1.8.5:compile 

[INFO] \- org.powermock:powermock-api-mockito:jar:1.6.5:compile 
[INFO] +- org.mockito:mockito-core:jar:1.10.19:compile 
[INFO] \- org.powermock:powermock-api-mockito-common:jar:1.6.5:compile 
Смежные вопросы