Mockito делает действительные тесты Junit fail [duplicate]

Новый (в 2014 году) tidyr пакет также делает это просто, при этом gather() / spread() является слагаемыми для melt / cast.

library(tidyr)
spread(dat1, key = numbers, value = value)

Из github ,

tidyr - это перерисовка reshape2, предназначенная для сопровождения аккуратной структуры данных и работающая рука об руку с magrittr и dplyr, чтобы построить сплошной конвейер для анализа данных.

Так же, как reshape2 сделал меньше, чем изменение, tidyr делает меньше, чем reshape2. Он разработан специально для сбора данных, а не для общей перестройки, которую делает reshape2, или общего преобразования, которое изменилось. В частности, встроенные методы работают только для кадров данных, а tidyr не содержит полей или агрегации.

blockquote>

195
задан Noel Yap 24 October 2011 в 22:00
поделиться

10 ответов

Проблема заключалась в том, что использовался неправильный класс hamcrest.Matcher, а не hamcrest.MatcherAssert.

Чтобы узнать, какие зависимости (и версии) включены из источника во время тестирования, запустите:

mvn dependency:tree -Dscope=test
53
ответ дан Alex 22 August 2018 в 09:51
поделиться
  • 1
    Я была такая же проблема. Я использовал JUnit-dep и Hamcrest-core, но у меня был Powermock, который был указан ранее в помпе, в результате чего JUnit был включен до JUnit-dep и Hamcrest. – John B 3 November 2011 в 15:10
  • 2
    Также mockito-all включает некоторые классы Hamcrest. Лучше использовать mockito-core и исключить зависимость hamcrest. – Brambo 24 April 2012 в 10:39
  • 3
    Просто наткнулся на ту же проблему. Решение увеличивало версию junit до 4.11, которая является совместимой (т. Е. Содержит классы из ") с hamcrest 1.3 – r3mbol 12 September 2013 в 09:59

Я знаю, что это не лучший ответ, но если вы не можете получить работу с классом, это решение плана B.

В моем тестовом пути я добавил следующий интерфейс с реализацией по умолчанию для метода описанияMismatch.

package org.hamcrest;

/**
 * PATCH because there's something wrong with the classpath. Hamcrest should be higher than Mockito so that the BaseMatcher
 * implements the describeMismatch method, but it doesn't work for me. 
 */
public interface Matcher<T> extends SelfDescribing {

    boolean matches(Object item);

    default void describeMismatch(Object item, Description mismatchDescription) {
        mismatchDescription.appendDescriptionOf(this).appendValue(item);
    }

    @Deprecated
    void _dont_implement_Matcher___instead_extend_BaseMatcher_();
}
0
ответ дан Francis 22 August 2018 в 09:51
поделиться

Что сработало для меня, было исключение группы hamcrest из компиляции теста junit.

Вот код из моего build.gradle:

testCompile ('junit:junit:4.11') {
    exclude group: 'org.hamcrest'
}

Если вы используете IntelliJ вам может потребоваться запустить gradle cleanIdea idea clean build, чтобы снова обнаружить зависимости.

0
ответ дан Jason D 22 August 2018 в 09:51
поделиться

Удостоверьтесь, что кусок hamcrest выше в порядке импорта, чем ваш JUnit jar.

JUnit поставляется со своим org.hamcrest.Matcher классом, который, вероятно, используется вместо этого.

You также может загружать и использовать junit-dep-4.10.jar, а это JUnit без классов hamcrest.

mockito также имеет классы hamcrest в нем, поэтому вам может потребоваться переместить \nереупорядочить его как а

246
ответ дан javamonkey79 22 August 2018 в 09:51
поделиться
  • 1
    OP сказал, что они уже используют банку «-dep-». Но вы догадываетесь, что он использует класс Matcher из JUnit jar. Так что, вероятно, IDE использует свою собственную копию JUnit. – MatrixFrog 24 October 2011 в 21:40
  • 2
    Я удалил экземпляр junit.jar и junit-4.8.jar IntelliJ, установил junit-dep-4.10.jar в каталог lib / int IntelliJ, и проблема все еще возникает. – Noel Yap 24 October 2011 в 21:59
  • 3
    Вы проверили .classppath, чтобы убедиться, что нет других записей JUnit? – Garrett Hall 24 October 2011 в 22:02
  • 4
    JUnit 4.11 совместим с Hamcrest 1.3, а JUnit 4.10 совместим с Hamcrest 1.1 search.maven.org/remotecontent?filepath=junit/junit-dep/4.10/… – Muthu 15 May 2014 в 13:04
  • 5
    убедитесь, что вы НЕ используете mockito-all, но вместо этого mockito-core с исключением hamcrest – Ulf Lindback 21 November 2014 в 11:19

Я знаю, что это старый поток, но для решения этой проблемы я добавил следующее в мои файлы build.gradle. Как уже было сказано выше, проблема совместимости с mockito-all

Возможно, полезно post :

testCompile ('junit:junit:4.12') {
    exclude group: 'org.hamcrest'
}
testCompile ('org.mockito:mockito-core:1.10.19') {
    exclude group: 'org.hamcrest'
}
testCompile 'org.hamcrest:hamcrest-core:1.3'
2
ответ дан Kai 22 August 2018 в 09:51
поделиться

Эта проблема возникает также, когда у вас есть mockito-all на вашем пути к классу, который уже устарел.

Если возможно, просто включите mockito-core.

Конфигурация Maven для смешивания junit , mockito и hamcrest:

<dependencies>
  <dependency>
    <groupId>org.hamcrest</groupId>
    <artifactId>hamcrest-core</artifactId>
    <version>1.3</version>
    <scope>test</scope>
  </dependency>
  <dependency>
    <groupId>org.hamcrest</groupId>
    <artifactId>hamcrest-library</artifactId>
    <version>1.3</version>
    <scope>test</scope>
  </dependency>
  <dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-all</artifactId>
    <version>1.9.5</version>
    <scope>test</scope>
  </dependency>
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
  </dependency>
</dependencies>
143
ответ дан marcin 22 August 2018 в 09:51
поделиться
  • 1
    Это работает в одном проекте, но не в другом .... – Mike Rylander 28 August 2013 в 23:26
  • 2
    Совершенно так же, как новые версии mockito включают hamcrest также то же самое с powermock! – Tom Parkinson 17 December 2013 в 11:33
  • 3
    Должно ли это быть mockito-core вместо mockito-all? – user944849 13 January 2014 в 23:38
  • 4
    Вы можете включить только ядро, если вам это нужно только в темпе, но выше все должно работать во всех случаях. Порядок зависимостей - это важный бит mvn 3, который начинается сверху в порядке приоритета. – Tom Parkinson 14 January 2014 в 10:15
  • 5
    Вы не должны включать mockito-all, так как это включает hamcrest 1.1, вместо этого включает в себя mockito-core и исключает из него hancrest (что вы не можете сделать со всех) – Ulf Lindback 21 November 2014 в 11:12

Попробуйте

expect(new ThrowableMessageMatcher(new StringContains(message)))

вместо

expectMessage(message)

Вы можете написать пользовательскую функцию ExpectedException или утилиту метод для завершения кода.

4
ответ дан mlegge 22 August 2018 в 09:51
поделиться

Это работало для меня после битвы немного

<dependency>
    <groupId>org.hamcrest</groupId>
    <artifactId>hamcrest-all</artifactId>
    <version>1.3</version>
    <scope>test</scope>
 </dependency>

 <dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-all</artifactId>
    <version>1.9.5</version>
    <scope>test</scope>
 </dependency>

 <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
 </dependency>
14
ответ дан Oliver 22 August 2018 в 09:51
поделиться
  • 1
    Этот фрагмент также работал для меня. – Gábor Nagy 20 March 2015 в 14:12
  • 2
    Мне то же. Включение зависимостей в этом порядке помогает maven правильно разрешать транзитивные отпечатки. Явно исключая hamcrest из mockito-core или mockito - все может быть более безопасным, хотя, в случае, если кто-то переделывает depom в вашем pom. – Mat 26 January 2017 в 15:48

Несмотря на то, что это очень старый вопрос, и, вероятно, многие из рассмотренных идей решили многие проблемы, я все же хочу поделиться решением с сообществом, которое исправило мою проблему.

Я обнаружил, что Проблема заключалась в функции под названием «hasItem», которую я использовал для проверки того, содержит ли JSON-Array определенный элемент. В моем случае я проверил значение типа Long.

И это привело к проблеме.

Как-то, у Matches есть проблемы со значениями типа Long. (Я не использую JUnit или Rest-Assured так сильно, поэтому idk. Именно поэтому, но я думаю, что возвращаемые JSON-данные просто содержат целые числа.)

Итак, что я сделал, чтобы исправить эту проблему, было следующие. Вместо использования:

long ID = ...;

...
.then().assertThat()
  .body("myArray", hasItem(ID));

вам просто нужно отправить в Integer. Таким образом, рабочий код выглядел так:

long ID = ...;

...
.then().assertThat()
  .body("myArray", hasItem((int) ID));

Это, вероятно, не лучшее решение, но я просто хотел упомянуть, что исключение также может быть выбрано из-за неправильных / неизвестных типов данных.

1
ответ дан Siro 22 August 2018 в 09:51
поделиться

Сегодня самое правильное. Примечание. Junit 4.11 зависит от hamcrest-core, поэтому вам не нужно указывать, что вообще, mockito-all нельзя использовать, поскольку он включает (не зависит от) hamcrest 1.1

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-core</artifactId>
    <version>1.10.8</version>
    <scope>test</scope>
    <exclusions>
        <exclusion>
            <groupId>org.hamcrest</groupId>
            <artifactId>hamcrest-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>
25
ответ дан Ulf Lindback 22 August 2018 в 09:51
поделиться
  • 1
    Обратите внимание, что JUnit 4.12 теперь зависит от hamcrest-core 1.3. – JeeBee 6 March 2015 в 18:47
  • 2
    Исключение из mockito-all помогло мне, а не mockito-core. Также объявляется Хамбрест до Мокито в pom.xml. – Derp 18 January 2018 в 22:55
Другие вопросы по тегам:

Похожие вопросы: