Почему это не кодирует попытку использовать компиляцию hasItems Hamcrest?

Я думаю, что Вы хотите сделать, создают связанный сервер согласно этот статья MSDN. Вы тогда выбрали бы использование 4 имен объекта части, например:

Select * From ServerName.DbName.SchemaName.TableName

55
задан 5 revs, 3 users 82% 11 January 2017 в 06:18
поделиться

4 ответа

Вы сравниваете ArrayList с int . Правильное сравнение:

...
assertThat(actual, hasItem(2));

- Изменить -

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

public static <T> org.hamcrest.Matcher<java.lang.Iterable<T>> hasItems(T... elements)

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

assertThat(actual, hasItems(2,4,1,5,6));

- Редактировать 2 -

Просто вставив сюда мой комментарий, есть эквивалентное выражение для того, что вы хотите, без использования Hamcrest:

assertTrue(actual.containsAll(expected));
12
ответ дан 7 November 2019 в 07:21
поделиться

Это сообщение об ошибке похоже на сообщение, созданное компилятором javac. В прошлом я обнаружил, что код, написанный с использованием hamcrest, просто не компилируется под javac. Тот же код будет хорошо компилироваться, скажем, с компилятором Eclipse.

Я думаю, что дженерики Hamcrest реализуют угловые случаи в дженериках, с которыми javac не может справиться.

2
ответ дан 7 November 2019 в 07:21
поделиться

Попробуйте

assertThat(actual, hasItems(expected.toArray(new Integer[0])));

удовлетворить подпись сопоставителя. Нет Eclipse, так что это может не сработать.

3
ответ дан 7 November 2019 в 07:21
поделиться

hasItems проверяет, что коллекция содержит некоторые элементы, а не то, что две коллекции равны, просто используйте для этого обычные утверждения равенства. Так что либо assertEquals (a, b), либо использование assertThat

import static org.junit.Assert.assertThat;
import static org.hamcrest.CoreMatchers.is;

ArrayList<Integer> actual = new ArrayList<Integer>();
ArrayList<Integer> expected = new ArrayList<Integer>();
actual.add(1);
expected.add(2);
assertThat(actual, is(expected));

. В качестве альтернативы, используйте contains Matcher, который проверяет, что Iterable содержит элементы в определенном порядке

import static org.junit.Assert.assertThat;
import static org.hamcrest.Matchers.contains;

ArrayList<Integer> actual = new ArrayList<Integer>();
actual.add(1);
actual.add(2);
assertThat(actual, contains(1, 2)); // passes
assertThat(actual, contains(3, 4)); // fails

Если вас не волнует порядок, используйте containsInAnyOrder .

22
ответ дан 7 November 2019 в 07:21
поделиться
Другие вопросы по тегам:

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