我从大学获得了一些示例代码,导入了项目并尝试运行测试: 方法assertThat(Integer,Matcher)对于MyClass类型
是不明确的每个断言都标记为红色,并显示相同的错误消息,因此我尝试编写描述问题的最简单测试:
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));
}
滚动断言后,我收到以下消息:
The method assertThat(Integer, Matcher<Integer>) is ambiguous for the type MyClass
我搜索了谷歌和stackoverflow但找不到任何有相同问题的人...请帮忙。
EDIT1:
解决方案:
import static org.junit.Assert。*; //删除此行
答案 0 :(得分:23)
org.junit.Assert
和org.hamcrest.MatcherAssert
都声明assertThat(T, Matcher<T>)
。选择静态导入一个或另一个,但不能同时导入两者,你应该没问题。
答案 1 :(得分:3)
这有两个一般原因,不合格的静态导入(import static blah.*
),或路径上的多个版本的hamcrest。
你可以通过使用长格式is(equalTo(3))
(有点怀疑),剔除静态导入等来绕过它。
您使用它的哪个框架也很重要。