JUnit 异常测试

Posted qulianqing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JUnit 异常测试相关的知识,希望对你有一定的参考价值。

JUnit 异常测试

  1. 上古写法
    @Test
    void name() {
        boolean hasException = false;
        String exceptionMessage = null;
        try {
            check();
        } catch (RuntimeException e) {
            hasException = true;
            exceptionMessage = e.getMessage();
        }
        assertEquals("runtime", exceptionMessage);
        assertTrue(hasException);
    }

    void check() {
        throw new RuntimeException("runtime");
    }
  1. 普通写法(易错的)
    check message 和异常类型
   @Test
   void name() {
      assertThrows(RuntimeException.class, () -> check(), "aaa");
   }

   void check() {
       throw new RuntimeException("runtime");
   }

这个测试我们发现异常message 不对但是测试也能过。
扒一扒源码
技术图片

发现消费message 居然测试不是异常的消息,而是异常不是期待的,和没有异常的情况去消费的。
2.1 普通写法

   @Test
    void name() {
        final RuntimeException runtimeException = assertThrows(RuntimeException.class, () -> check());
        assertEquals("runtime", runtimeException.getMessage());
    }

    void check() {
        throw new RuntimeException("runtime");
    }

3.流式写法

     @Test
    void name() {
        assertThatThrownBy(() -> check())
            .isInstanceOf(RuntimeException.class)
            .hasMessage("runtime");
    }

    void check() {
        throw new RuntimeException("runtime");
    }

个人认为流式写法目前的认知范围内是最优雅的。





以上是关于JUnit 异常测试的主要内容,如果未能解决你的问题,请参考以下文章

使用java.lang.Exception的错误:测试类应该只有一个公共构造函数

为啥 JUnit 测试异常总是失败? [复制]

Junit - 期望异常测试(Expected Test)

JUnit 4 如何正确测试异常

为 Java 中的自定义检查异常编写 JUnit 测试用例?

来自 junit 测试的“分叉 Java VM 异常退出”错误