containsString未定义

时间:2018-05-23 21:20:56

标签: junit5 assertthat

我有一个Junit(5)测试用例,当一个变量超出范围时,它正在寻找异常,并且我为它引发了一个IllegalArgumentException。

@Test
void testOutOfBoundsException() {
    Foo f = new Foo();

    IllegalArgumentException e = assertThrows(
            IllegalArgumentException.class, 
            () -> {
                f.checkVal(10);
                }
    );
    assertThat(e, hasMessageThat(containsString("You must enter a number between 0 and")));
}

我收到错误

The method containsString(String) is undefined for the type FooTest

我已经为JUnit和hamcrest尝试了许多不同的import语句,但我似乎无法让它工作。

3 个答案:

答案 0 :(得分:0)

您可以简单地使用以下代码:

  assertThatIllegalArgumentException().isThrownBy(() -> { 
  f.checkVal(10); 
  }) .withMessage("You must enter a number between 0 and");

你可能需要assertj-core:

    <dependency>
        <groupId>org.assertj</groupId>
        <artifactId>assertj-core</artifactId>
        <version>3.8.0</version>
        <scope>test</scope>
    </dependency>

答案 1 :(得分:0)

您必须从containsString类添加org.hamcrest.CoreMatchers的静态导入:

import static org.hamcrest.CoreMatchers.containsString;

答案 2 :(得分:0)

感谢那些发布答案的人。

最后我发现我可以这样做:

IllegalArgumentException e = assertThrows(
        IllegalArgumentException.class, 
        () -> {
            f.checkVal(10);
            },
            <exception message>); 

所以我不需要第二部分:)