11

我从一所大学获得了一些示例代码,导入了项目并尝试运行测试:方法 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

我搜索了谷歌和stackoverflow,但找不到任何有同样问题的人......请帮忙。

编辑1:

解决方案:

导入静态 org.junit.Assert.*;// 删除这一行

4

2 回答 2

27

两者org.junit.Assertorg.hamcrest.MatcherAssert声明assertThat(T, Matcher<T>)。选择静态导入其中一个,但不能同时导入,你应该没问题。

于 2011-10-31T15:37:25.467 回答
3

造成这种情况的一般原因有两个,不合格的静态导入 ( import static blah.*),或者路径上有多个版本的 hamcrest。

您可以通过使用长格式is(equalTo(3))(有点怀疑)、剔除静态导入等来解决它。

您使用哪个框架也很重要。

于 2011-10-31T15:37:19.847 回答