NoClassDefFoundError при использовании Powermock

Я запускаю тестовый пример junit, используя средство запуска тестов PowerMock. Я использую следующую командную строку для его выполнения:

java -cp .:junit-4.9b2.jar:easymock-3.0.jar:powermock-easymock-1.4.8-full.jar org.junit.runner.JUnitCore SampleTest

При этом я получаю эту ошибку:

initializationError(SampleTest)
java.lang.NoClassDefFoundError: org/junit/internal/runners/TestClassRunner
...

Как я могу это исправить?


person lukas    schedule 13.03.2011    source источник


Ответы (5)


Я только что решил это сейчас, когда я добавил атрибут @RunWith(PowerMockRunner.class), eclipse автоматически импортировался:

import org.powermock.modules.junit4.legacy.PowerMockRunner;

Все, что мне нужно было сделать, это изменить его на:

import org.powermock.modules.junit4.PowerMockRunner;

И теперь он отлично работает с JUnit 4.8.2.

Второй бегун предназначен для работы с более старыми версиями JUnit, особенно с 4.3 и старше.

person RonK    schedule 05.07.2011
comment
Большое спасибо за ответ. Для тех, кто использует maven, это также может быть вызвано использованием неправильной зависимости powermockito-junit. Убедитесь, что powermock-module-junit4-legacy включено для junit4.0-4.3 и powermock-module-junit для junit4.4 или новее. Проверьте эту конфигурацию pom - person emrekgn; 21.05.2018

См. здесь.

Вероятно, вы используете не тот PowerMockRunner. Один модуль запуска предназначен для JUnit 4.4 и более поздних версий, а второй — для JUnit 4.0–4.3 (хотя последний также работает для некоторых более ранних второстепенных версий JUnit 4.4).
Попробуйте переключиться с org.powermock.modules.junit4. PowerMockRunner в org.powermock.modules.junit4.legacy.PowerMockRunner или наоборот. Посмотрите руководство по началу работы, чтобы узнать, как настроить это в maven.

person juan    schedule 23.09.2011

Это исключение возникает, когда вы импортируете устаревшую версию PowerMockRunner.class при использовании JUnit 4.X или более поздней версии, поскольку этот устаревший класс недоступен для запуска при использовании его с аннотацией @RunWith. Я решил эту проблему, заменив импорт старой устаревшей версии новой версией.

Неправильный импорт:

import org.powermock.modules.junit4.legacy.PowerMockRunner;

Правильный импорт:

import org.powermock.modules.junit4.PowerMockRunner;
person Shreeram Reddy    schedule 03.12.2018

Я решил проблему. Я использовал старую версию junit-4.0.jar. Но я до сих пор не понимаю, почему отсутствует класс TestClassRunner, особенно в пакете powermock-easymock-junit-1.4.8.zip (есть junit-4.8.2.jar)? В junit-4.8.2.jar также отсутствует класс TestClassRunner.

person lukas    schedule 13.03.2011
comment
Это не правильное решение - просто обходной путь. Смотри мой ответ - person RonK; 05.07.2011

Я использую JUnit 4.0–4.3 и обновил свою зависимость maven, чтобы использовать версию powermockito 2.0.0-beta.5. Он только начал работать.

 <dependency>
    <groupId>org.powermock</groupId>
    <artifactId>powermock-module-junit4</artifactId>
    <version>2.0.0-beta.5</version>
    <scope>test</scope>
 </dependency>
 <dependency>
    <groupId>org.powermock</groupId>
    <artifactId>powermock-api-mockito2</artifactId>
    <version>2.0.0-beta.5</version>
    <scope>test</scope>
  </dependency>
person Keerthikanth Chowdary    schedule 27.09.2018