【发布时间】:2014-07-21 23:51:03
【问题描述】:
我编写了下面的简单 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 "";
}
}
我正在尝试在断言中使用“containsString”方法,但 IntelliJ 一直告诉我它“无法解析方法 'containsString(java.lang.String)”。尽管 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.*;
我得到的最好的结果是一个灰色的导入语句,告诉我导入语句未使用。不知道是什么问题,如有帮助,将不胜感激。
更新:
这是确切的编译器错误:
java: cannot find symbol
symbol: method containsString(java.lang.String)
location: class JUnit_Dummy
【问题讨论】:
-
请提供确切的编译器错误和/或堆栈跟踪,您可以在其中看到这一点。
-
已添加。但是首先,作为一个 IDE,IntelliJ 能够告诉我它无法解决有问题的方法,而无需我进行编译。
-
JUnitMatchers 还是 CoreMatchers?
-
@SotiriosDelimanolis 好问题。我以为我已经尝试了这两种方法,但我只是尝试了以下方法并且它起作用了:“import static org.junit.matchers.JUnitMatchers.*;”谢谢你的灵感。 :-)
-
@SotiriosDelimanolis,你知道为什么 JUnitMatchers 可以工作而 CoreMatchers 不行吗?
标签: java junit intellij-idea