java - 使用自定义字段中的特定条件断言预期异常

标签 java junit junit4 hamcrest

我想验证预期异常是否满足特定条件。以此为起点:

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/

相关文章:

java - Jersey 测试期间“在调用 getWriter() 后非法尝试调用 getOutputStream()”

android - 如何模拟采用回调对象和调用者使用回调委托(delegate)结果的方法

java - 在测试目录中运行主类

java - 这两种类初始化方法有什么区别?

java - 遍历 List 但它只显示最后一项

java - 尽管推断出 Long,但 Collectors.maxBy(Comparator.naturalOrder()) 无法编译

java - java Equal方法的JUnit测试

java - '@>'符号在postgresql中是什么意思?

java.lang.NoClassDefFoundError : Failed resolution of: Lorg/junit/runner/notification/RunListener 错误

eclipse - 使用 Maven 进行 JUnit 测试