Hamcrest утверждают, что неоднозначно? - PullRequest
9 голосов
/ 31 октября 2011

Я получил пример кода из колледжа, импортировал проект и попытался запустить тесты: метод assertThat (Integer, Matcher) неоднозначен для типа MyClass

Каждый assertThat помечен красным с той же ошибкой-Message, поэтому я попытался написать самый простой тест, который описывает проблему:

import static org.hamcrest.MatcherAssert.*;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;

@Test
public void whenAssertThatThenItIsAmbiguous() {
    List<String> list = Arrays.asList("A", "B", "C");
    assertThat(list.size(), is(3));
}

после прокрутки assertThat я получаю следующее сообщение:

The method assertThat(Integer, Matcher<Integer>) is ambiguous for the type MyClass

Я искал Google и StackOverflow, ноне смог найти никого с такой же проблемой ... Пожалуйста, помогите.

EDIT1:

Решение:

import static org.junit.Assert. *; // удалить эту строку

Ответы [ 2 ]

23 голосов
/ 31 октября 2011

Обе org.junit.Assert и org.hamcrest.MatcherAssert объявляют assertThat(T, Matcher<T>). Выберите статический импорт одного или другого, но не обоих, и все должно быть в порядке.

3 голосов
/ 31 октября 2011

Для этого есть две основные причины: неквалифицированный статический импорт (import static blah.*) или несколько версий hamcrest на пути.

Вы можете обойти это, используя длинную форму is(equalTo(3)) (отчасти сомневаюсь в этом), отбраковывая статический импорт и т. д.

Какая инфраструктура, с которой вы его используете, тоже может иметь значение.

...