Новый (в 2014 году) tidyr
пакет также делает это просто, при этом gather()
/ spread()
является слагаемыми для melt
/ cast
.
library(tidyr)
spread(dat1, key = numbers, value = value)
Из github ,
tidyr
- это перерисовкаreshape2
, предназначенная для сопровождения аккуратной структуры данных и работающая рука об руку сmagrittr
иdplyr
, чтобы построить сплошной конвейер для анализа данных.Так же, как
blockquote>reshape2
сделал меньше, чем изменение,tidyr
делает меньше, чемreshape2
. Он разработан специально для сбора данных, а не для общей перестройки, которую делаетreshape2
, или общего преобразования, которое изменилось. В частности, встроенные методы работают только для кадров данных, аtidyr
не содержит полей или агрегации.
Проблема заключалась в том, что использовался неправильный класс hamcrest.Matcher
, а не hamcrest.MatcherAssert
.
Чтобы узнать, какие зависимости (и версии) включены из источника во время тестирования, запустите:
mvn dependency:tree -Dscope=test
Я знаю, что это не лучший ответ, но если вы не можете получить работу с классом, это решение плана 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_();
}
Что сработало для меня, было исключение группы hamcrest из компиляции теста junit.
Вот код из моего build.gradle:
testCompile ('junit:junit:4.11') {
exclude group: 'org.hamcrest'
}
Если вы используете IntelliJ вам может потребоваться запустить gradle cleanIdea idea clean build
, чтобы снова обнаружить зависимости.
Удостоверьтесь, что кусок hamcrest выше в порядке импорта, чем ваш JUnit jar.
JUnit поставляется со своим org.hamcrest.Matcher
классом, который, вероятно, используется вместо этого.
You также может загружать и использовать junit-dep-4.10.jar, а это JUnit без классов hamcrest.
mockito также имеет классы hamcrest в нем, поэтому вам может потребоваться переместить \nереупорядочить его как а
Я знаю, что это старый поток, но для решения этой проблемы я добавил следующее в мои файлы 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'
Эта проблема возникает также, когда у вас есть 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>
Попробуйте
expect(new ThrowableMessageMatcher(new StringContains(message)))
вместо
expectMessage(message)
Вы можете написать пользовательскую функцию ExpectedException
или утилиту метод для завершения кода.
Это работало для меня после битвы немного
<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>
Несмотря на то, что это очень старый вопрос, и, вероятно, многие из рассмотренных идей решили многие проблемы, я все же хочу поделиться решением с сообществом, которое исправило мою проблему.
Я обнаружил, что Проблема заключалась в функции под названием «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));
Это, вероятно, не лучшее решение, но я просто хотел упомянуть, что исключение также может быть выбрано из-за неправильных / неизвестных типов данных.
Сегодня самое правильное. Примечание. 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>
mockito-all
помогло мне, а не mockito-core
. Также объявляется Хамбрест до Мокито в pom.xml
.
– Derp
18 January 2018 в 22:55