我想验证预期异常是否满足特定条件。以此为起点:
class MyException extends RuntimeException {
int n;
public MyException(String message, int n) {
super(message);
this.n = n;
}
}
public class HowDoIDoThis {
@Rule
public ExpectedException thrown = ExpectedException.none();
@Test
public void test1() {
thrown.expect(MyException.class);
throw new MyException("x", 10);
}
}
例如,如何断言抛出的异常有 n > 1
并且 message
仅包含小写字母?我正在考虑使用 thrown.expect(Matcher)
但不知道如何让 Hamcrest 匹配器来检查对象的任意字段。
最佳答案
一个简洁而简洁的替代方法是使用 AssertJ 而不是 ExpectedException 规则。
assertThatThrownBy(() -> {
throw new MyException("x", 10);
})
.matches(e -> e.getMessage().equals(e.getMessage().toLower()), "message is lowercase")
.matches(e -> ((CustomException) e).n > 10, "n > 10");
关于java - 使用自定义字段中的特定条件断言预期异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59843470/