我已经编写了下面的简单Java脚本,以便更多地了解TDD,IntelliJ和Java本身。
import java.util.ArrayList;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import static org.hamcrest.CoreMatchers.containsString;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import static org.junit.matchers.JUnitMatchers.both;
public class JUnit_Dummy {
private StringJoiner joiner;
private List<String> strings;
@Before
public void setUp() throws Exception {
strings = new ArrayList<String>();
joiner = new StringJoiner();
}
....
@Test
public void shouldContainBothStringsWhenListIsTwoStrings() {
strings.add("one");
strings.add("two");
assertThat(joiner.join(strings),
both(containsString("A")).
and(containsString("B")));
}
}
_____________
import java.util.List;
public class StringJoiner {
public String join(List<String> strings) {
if(strings.size() > 0) {
return (strings.get(0);
}
return "";
}
}
我试图使用&#34; containsString&#34;断言中的方法,但IntelliJ一直告诉我它无法解析方法&#39; containsString(java.lang.String)&#34;。尽管jUnit文档(http://junit.sourceforge.net/javadoc/org/junit/matchers/JUnitMatchers.html#containsString(java.lang.String))告诉我这个方法确实接受了String参数。
我已尝试更换各种导入语句,包括以下内容:
import static org.hamcrest.Matcher.containsString;
import static org.hamcrest.Matcher.*;
import static org.hamcrest.CoreMatchers.*;
我得到的最好的是一个灰色的import语句,告诉我import语句未被使用。不确定问题是什么,任何帮助都将不胜感激。
更新:
这是确切的编译器错误:
java: cannot find symbol
symbol: method containsString(java.lang.String)
location: class JUnit_Dummy
答案 0 :(得分:13)
我以为我已经尝试了所有有价值的导入语句,但是这个做了诀窍:
import static org.junit.matchers.JUnitMatchers.*;
答案 1 :(得分:1)
我们应该使用hamcrest库的containsString
方法。
我的建议是坚持使用Junit 4并在构建路径中导入hamcrest库1.3。这样就可以了。
这将允许您访问hamcrest库的其他功能。
也可以通过手动添加所需的静态导入来找到解决方案。或者,您可以在eclipse的“收藏夹”选项卡中配置所需的静态导入。
答案 2 :(得分:1)
我遇到了与Spring Boot应用程序相同的问题。 看起来这是一个依赖性排序问题..在&#34; spring-boot-starter-test&#34;之前的pom.xml中提到的依赖项之一。神器覆盖了hamcrest版本。
所以我所做的就是改变顺序(将这种依赖性提高了):
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
我使用的是Spring Boot 1.5.7.RELEASE。
答案 3 :(得分:0)
改为尝试
导入静态org.hamcrest.CoreMatchers。*;
答案 4 :(得分:0)
我正在与 MAVEN 合作 - 正在做一个教程,但我遇到了同样的问题。
我使用了“导入静态 org.hamcrest.CoreMatchers.*;”解决方案,但失败了。
然后我将 JUNIT 移到 POM 文件列表中的第一个位置 - 这解决了它。