Я использую JUnit-dep 4.10 и Hamcrest 1.3.RC2.
Я создал собственный сопоставитель, который выглядит следующим образом:
public static class MyMatcher extends TypeSafeMatcher<String> {
@Override
protected boolean matchesSafely(String s) {
/* implementation */
}
@Override
public void describeTo(Description description) {
/* implementation */
}
@Override
protected void describeMismatchSafely(String item, Description mismatchDescription) {
/* implementation */
}
}
Он отлично работает при запуске из командной строки с помощью Ant. Но когда запускается из IntelliJ, он терпит неудачу с:
java.lang.NoSuchMethodError: org.hamcrest.Matcher.describeMismatch(Ljava/lang/Object;Lorg/hamcrest/Description;)V
at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:18)
at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:8)
at com.netflix.build.MyTest.testmyStuff(MyTest.java:40)
Я предполагаю, что он использует неправильный hamcrest.MatcherAssert. Как мне найти, какой Hamcrest.MatcherAssert он использует (т.е. какой файл JAR он использует для Hamcrest.MatcherAssert)? AFAICT, единственные банки подколенного сухожилия в моем классе - 1.3.RC2.
Использует ли IntelliJ IDEA собственную копию JUnit или Hamcrest?
Как вывести время выполнения CLASSPATH, которое использует IntelliJ?
Эта проблема также возникает, когда у вас есть mockito-all на пути к классам, что уже устарело.
Если возможно, просто включите мокито-ядро .
Конфигурация Maven для смешивания junit, mockito и hamcrest:
источник
Проблема заключалась в том
hamcrest.Matcher
, что использовался неправильныйhamcrest.MatcherAssert
класс. Это было извлечено из зависимости от junit-4.8, которую указала одна из моих зависимостей.Чтобы увидеть, какие зависимости (и версии) включены из какого источника во время тестирования, запустите:
источник
-all
на-core
и т. Д.): Мне пришлось изменить Hamcrest обратно на версию 1.1, и теперь все работает снова.import static org.mockito.Matchers.anyString;
сimport static org.mockito.ArgumentMatchers.anyString;
Следующее должно быть наиболее правильным сегодня. Обратите внимание, что junit 4.11 зависит от ядра Hamcrest, поэтому вам не нужно указывать, что mockito-all нельзя использовать, поскольку он включает в себя (не зависит) от Hamcrest 1.1
источник
mockito-all
помогло мне, нетmockito-core
. Также объявляет Hamcrest перед Mockito вpom.xml
работах.Это сработало для меня после небольшой борьбы
источник
Пытаться
expect(new ThrowableMessageMatcher(new StringContains(message)))
вместо того
expectMessage(message)
Вы можете написать собственный
ExpectedException
или служебный метод для завершения кода.источник
Я знаю, что это старая ветка, но что решило проблему, добавив следующее в мои файлы build.gradle. Как уже говорилось выше, существует проблема совместимости с
mockito-all
Возможно полезный пост :
источник
Несмотря на то, что это очень старый вопрос и, вероятно, многие из вышеупомянутых идей решили многие проблемы, я все же хочу поделиться решением с сообществом, которое решило мою проблему.
Я обнаружил, что проблема была в функции «hasItem», которую я использовал, чтобы проверить, содержит ли JSON-Array определенный элемент. В моем случае я проверил значение типа Long.
И это привело к проблеме.
Почему-то у Matchers возникают проблемы со значениями типа Long. (Я не использую JUnit или Rest-Assured, поэтому idk. Именно поэтому, но я предполагаю, что возвращаемые данные JSON содержат только целые числа.)
Итак, что я сделал, чтобы решить проблему, так это следующее. Вместо того, чтобы использовать:
Вы просто должны привести к Integer. Итак, рабочий код выглядел так:
Возможно, это не лучшее решение, но я просто хотел упомянуть, что исключение также может быть вызвано из-за неправильных / неизвестных типов данных.
источник
Для меня сработало исключение группы hamcrest из тестовой компиляции junit.
Вот код из моего build.gradle:
Если вы используете IntelliJ, возможно, вам придется запустить его,
gradle cleanIdea idea clean build
чтобы снова обнаружить зависимости.источник
Я знаю, что это не лучший ответ, но если вы не можете заставить работать classpath, это решение плана B.
В моем тестовом пути к классам я добавил следующий интерфейс с реализацией по умолчанию для метода descriptionMismatch.
источник
У меня есть проект gradle, и когда мой раздел зависимостей build.gradle выглядит так:
это приводит к этому исключению:
Чтобы исправить эту проблему, я заменил «mockito-all» на «mockito-core».
Объяснение между mockito-all и mockito-core можно найти здесь: https://solidsoft.wordpress.com/2012/09/11/beyond-the-mockito-refcard-part-3-mockito-core-vs-mockito -все-в-mavengradle основе-проектов /
источник
В моем случае мне пришлось исключить более старый подколенный сухожилий из junit-vintage:
источник
Это сработало для меня. Не нужно ничего исключать. Я просто использовал
mockito-core
вместоmockito-all
источник