Hamcrest утверждают, что двусмысленно?

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

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

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, но не смог найти никого с такой же проблемой... Пожалуйста, помогите.

РЕДАКТИРОВАТЬ1:

Решение:

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


person MartinL    schedule 31.10.2011    source источник


Ответы (2)


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

person pholser    schedule 31.10.2011
comment
У меня была такая же проблема с импортом статического org.hamcrest.MatcherAssert.*; без org.junit.Assert внутри... - person ante.sabo; 16.01.2014

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

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

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

person Dave Newton    schedule 31.10.2011