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

java中的可检查和不检查

java中的可检查和不检查_检查Java测试中发生了什么相关推荐

  1. java中数值023是什么类型_【Java 教程(原创)】023.参数传值——引用类型参数的传值...

    马上注册,结交更多好友,享用更多功能^_^ 您需要 登录 才可以下载或查看,没有帐号?立即注册 x 本帖最后由 零度非安全 于 2017-3-12 14:03 编辑 点击图片穿越到 索引帖,听说有惊喜 ...

  2. java 中的finally你知多少_「JAVA」详述Java异常体系,处理异常时配上finally效果更佳...

    什么是异常 从事Java开发的小伙伴对于"异常"应该不陌生,因为每天都会遇到不少异常,或捕获,或抛出.那究竟什么是异常?异常即非正常的,不同于平常.一般化的情况.在平时生活中,医生 ...

  3. java数组出现次数最多的数_找出数组中出现次数最多的那个数——主元素问题...

    方法一:以空间换时间,可以定义一个计数数组int count[101],用来对数组中数字出现的次数进行计数(只能针对数组中数字的范围1~100),count数组中最大的元素对应的下标,即为出现次数最多 ...

  4. java中定义类的关键字为_在Java中,定义类的关键字是__________________.

    参考答案如下 患者,定的关女,定的关65岁.4年前被确诊为动脉粥样硬化,今日被人打后,入院检查中出现口唇发绀,四肢冰冷,血压下降而死亡.尸检发现:冠状动脉IV级狭窄,心肌变软.其死亡的原因 义类门静脉 ...

  5. Java读取文件流用什么对象_使用Java IO流实现对文本文件的读写过程中,通常需要处理下列( )异常。_学小易找答案...

    [论述题]请根据第一次平时作业的选题,结合第二次课内容,自拟一个论文提纲. [单选题]在 switch ( expression )语句中, expression 的数据类型不能是 ( ) [单选题] ...

  6. Java接口有时有结果 有时没有_《Java程序员面试笔试宝典》之为什么Java中有些接口没有任何方法...

    由于Java不支持多重继承,即一个类只能有一个父类,为了克服单继承的缺点,Java语言引入了接口这一概念.接口是抽象方法定义的集合(接口中也可以定义一些常量值),是一种特殊的抽象类.接口中只包含方法的 ...

  7. java两个文件夹比较路径_比较Java中两个文件的路径

    java两个文件夹比较路径 Given the paths of the two files and we have two compare the paths of the files in Jav ...

  8. java中访问控制修饰符什么含义_关于Java中访问控制修饰符的来由及浅解

    在Java中,制作者为我们提供了一种非常简洁方便地分类管理工作中需要用到的类的概念,就是"包".既然有了这个包,那么我们编写的类就存在于这个定义好的包中了.由于需求的限制,大部分类 ...

  9. java中short能优化int吗_关于java:为什么short基本类型比long或int显着慢?

    我试图通过将int原语更改为短裤来优化Android游戏的RAM使用率.在进行此操作之前,我对Java中原始类型的性能感兴趣. 因此,我使用卡尺库创建了这个小的测试基准. public class B ...

最新文章

  1. “一次性”小家电之死:互联网必是杀手
  2. 校园安全责任重大 安防守护迭代升级
  3. Git安装教程(Windows安装)
  4. 最短JS判断是否为IE6(IE的写法)
  5. 0x5f3759df的数学原理
  6. c语言经典编程案例猜数字,用c语言编程猜数字
  7. Javascript 获取字符串字节数的多种方法
  8. markdown 流程图_Markdown 进阶技能:用代码画流程图(编程零基础也适用)
  9. [转载] java中的经典问题:传值与传引用
  10. 学习Javascript的书籍(转)
  11. sql点滴41—MyISAM 和 InnoDB 讲解
  12. 2017.5 期中考试 完挂
  13. 基于JAVA+SpringMVC+Mybatis+MYSQL的汽车租赁系统
  14. python卡方检验关键词,特征选择——卡方检验(使用Python sklearn进行实现)
  15. petshop4.0 详解之七(PetShop表示层设计)
  16. 安全基础知识 最强0到33600端口详解
  17. Memory Forensics (内存取证)
  18. 快速制作index.html,介绍一个h5快速制作平台鲁班H5
  19. Verilog自学:关于门级,数据流级,行为级建模
  20. 谷歌重返中国_我如何利用数据科学重返幻想英超联赛并进入前1名

热门文章

  1. cf1512 G - Short Task
  2. [APIO2016] 划艇(dp + 组合数 + 前缀和优化)
  3. [HEOI2016TJOI2016]排序(二分+线段树)
  4. P2513-[HAOI2009]逆序对数列【dp,前缀和】
  5. Namomo Fish(Easy) Round 1
  6. AtCoder Beginner Contest 174 总结
  7. 【线段树】【LCT】【LCA】树点涂色(luogu 3703)
  8. 洛谷P2501数字序列 动态规划
  9. SpringCloud Ribbon(三)之IPing机制
  10. Spark入门(十八)之多表关联