检查Java测试中发生了什么

有人想到了在Java单元测试中使用trycatch块的想法:

 @Test  public void test() { 
    try { 
       callSomeCode(); 
    } catch (Exception e) { 
       assertEquals( "foo" , e.getMessage()); 
    }  } 

上面的内容很诱人,但不起作用 。 如果被测代码没有抛出,则不会执行任何断言。

所以要解决它:

 @Test  public void test() { 
    try { 
       callSomeCode(); 
       // if we get here there was no exception 
       fail(); 
    } catch (Exception e) { 
       assertEquals( "foo" , e.getMessage()); 
    }  } 

我们添加了一个fail ,这使其完全测试了是否抛出了正确的东西,但这很尴尬。

这是测试气味 过分主张的一个例子。

有多少种方法可以测试抛出的内容?

我所知道的所有方式:

  • 长远地做(上面)
  • 使用@Test(expected = ... )批注检查以正确的异常结尾的测试
  • 使用ExpectedException JUnit 规则 ,该规则允许您定义要结束的测试
  • 使用为您捕获异常的断言

为什么预期的异常模式不起作用

此处针对长期的方法进行了解释的规则使您可以定义以异常结尾的测试功能的成功标准。

例如

 // default to expecting no exception  @Rule  public ExpectedException expectedException = ExpectedException.none();  @Test  public void test() { 
   // the call should end in the right exception 
   expectedException.expectMessage(is( "foo" )); 
   // do the call 
   callSomeCode();  } 

这很有吸引力,但仍然是错误的

给定/何时/然后发生了什么?

测试应从上至下读取,并在末尾声明。 预期的异常模式必须在产生断言/期望的调用之前定义断言/期望,这是向后的。

反过来:

 @Test  public void test() { 
   assertThatThrownBy(() -> callSomeCode()) 
       .hasMessage( "foo" );  } 

简洁并能向前看。

翻译自: https://www.javacodegeeks.com/2019/08/checking-whats-thrown-in-java-tests.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值