为什么我导入的包含字符串方法不起作用?

2022-09-03 01:42:09

我在下面写了简单的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

答案 1

我以为我已经尝试了每个有价值的导入语句,但是这个做了伎俩:

import static org.junit.matchers.JUnitMatchers.*;

答案 2

我在Spring Boot应用程序上遇到了同样的问题。这似乎是一个依赖排序问题。pom中提到的依赖项之一.xml在“spring-boot-starter-test”工件覆盖hamcrest版本之前。

所以我所做的只是改变顺序(将此依赖关系向上移动):

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

我使用的是Spring Boot 1.5.7.RELEASE。


推荐