JUnit java.lang.NoSuchMethodError: junit.framework.ComparisonFailure.getExpected () Ljava / lang / String - PullRequest
26 голосов
/ 26 октября 2010

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

java.lang.NoSuchMethodError: junit.framework.ComparisonFailure.getExpected()Ljava/lang/String;
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestListener.testFailure(JUnit4TestListener.java:63)
    at org.junit.runner.notification.RunNotifier$4.notifyListener(RunNotifier.java:100)
    at org.junit.runner.notification.RunNotifier$SafeNotifier.run(RunNotifier.java:41)
    at org.junit.runner.notification.RunNotifier.fireTestFailure(RunNotifier.java:97)
    at org.junit.internal.runners.JUnit38ClassRunner$OldTestClassAdaptingListener.addError(JUnit38ClassRunner.java:41)
    at org.junit.internal.runners.JUnit38ClassRunner$OldTestClassAdaptingListener.addFailure(JUnit38ClassRunner.java:64)
    at junit.framework.TestResult.addFailure(TestResult.java:46)
    at junit.framework.TestResult.runProtected(TestResult.java:127)
    at junit.framework.TestResult.run(TestResult.java:109)
    at junit.framework.TestCase.run(TestCase.java:118)
    at junit.framework.TestSuite.runTest(TestSuite.java:208)
    at junit.framework.TestSuite.run(TestSuite.java:203)
    at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:83)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
    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)

Кто-нибудь знает, что вызывает это?Это похоже на внутреннюю проблему с бегуном JUnit.

Ответы [ 7 ]

21 голосов
/ 26 октября 2010

Метод getExpected() для junit.framework.ComparisonFailure был добавлен только в JUnit 3.8.2 (помните, пакет junit.framework взят из JUnit 3.8, тогда как JUnit 4 использует org.junit).Этот метод отсутствовал в 3.8.1, которая является самой распространенной версией 3.x до сих пор.

Я думаю, что этот метод был добавлен для облегчения перехода на инструментарий JUnit 4, и иногда это исключение появляетсяна старых кодовых базах, использующих JUnit 3.8.При запуске тестов JUnit 3.8 запускающий тест Eclipse JUnit 4 снова переключается на вызов кода junit.framework.*.столкновение с бегунком испытаний Eclipse.Либо избавьтесь от этого JAR-файла, либо «обновите» его до 3.8.2.

12 голосов
/ 24 ноября 2010

Это также может произойти, если вы используете JUnit 4, но импортируете класс Assert из старого пакета junit.framework (а не из нового пакета org.junit)

Проверьте ваш импорт и статический импорт - виновник для меня был import static junit.framework.Assert.assertEquals;

7 голосов
/ 05 июля 2012

При выполнении моего тестового класса в Eclipse со мной произошла та же ошибка, но мое решение немного отличалось.

Моя установка состояла в том, что в пути к классу у меня был jar-файл junit-4.10, но мой тестовый класс использовал junit 3и исключение возникало только в случае сбоя метода assertEquals.

Проблема заключалась в том, что в eclipse по-прежнему использовался бегун junit 4, поэтому я изменил его, отредактировав конфигурацию (выбрав «Run Configuration» в eclipse, затем выбравтестовый класс, а затем в раскрывающемся меню выберите «Run Runner» с «JUnit 4» на «JUnit 3»).

3 голосов
/ 09 октября 2015

В моем случае проблема заключалась в том, что junit-4.5.jar был добавлен непосредственно в проект в качестве библиотеки.

Мое решение состояло в том, чтобы удалить зависимость от jarit jit из проекта Eclipse и использовать библиотеку плагинов JUnit.Он добавляется автоматически или может быть добавлен вручную, нажав кнопку Добавить библиотеку на экране библиотеки проекта.

Тот, кто берет JUnit из плагина и имеет ссылку, подобную этой:

.../Eclipse/plugins/org.junit_4.12.0.v201504281640 

Также необходимо переместить библиотеку JUnit в начало списка на вкладке «Порядок и экспорт».Флажок для экспорта не требуется.

1 голос
/ 27 марта 2014

У меня тоже была проблема, но это было из-за того, что я использовал JUnit 4.1. Я перешел на 4.4 и проблема ушла.

0 голосов
/ 25 января 2018

Проверка зависимостей и импортированных библиотек версий наиболее эффективна в этом случае.

Например, аннотация @Test может быть импортирована из org.junit.Test, а не @org.testng.annotations.Test. Для проекта Android это может привести к ошибке вроде:

Исключение в потоке "main" java.lang.NoSuchMethodError: ...

0 голосов
/ 07 апреля 2014

У меня возникла проблема только после того, как я обновил Eclipse до версии Kepler. Тест запустился бы нормально, если бы я выполнил "Все" тесты. Но когда я запустил тест одного метода, он не смог бы с этой ошибкой.

Я нашел этот ответ и решил поделиться им здесь, чтобы помочь кому-то еще в будущем. Короче говоря, это обновление до Junit 4.4 или лучше

https://www.gotraveltech.com/confluence/display/COOK/My+Eclipse Прокрутите вниз до «Как запустить отдельные тесты JUnit 4.x.x в MyEclipse?»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...