我有一个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语句,但我似乎无法让它工作。
答案 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>);
所以我不需要第二部分:)