使用JUnit测试预期异常
2016-05-05 09:52
337 查看
本文由 ImportNew - 踏雁寻花 翻译自 javacodegeeks。欢迎加入翻译小组。转载请见文末要求。
开发人员常常使用单元测试来验证的一段儿代码的操作,很多时候单元测试可以检查抛出预期异常(expected exceptions)的代码。在Java语言中,JUnit是一套标准的单元测试方案,它提供了很多验证抛出的异常的机制。本文就探讨一下他们的优点。
我们拿下面的代码作为例子,写一个测试,确保canVote() 方法返回true或者false, 同时你也能写一个测试用来验证这个方法抛出的IllegalArgumentException异常。
(Guava类库中提供了一个作参数检查的工具类–Preconditions类,也许这种方法能够更好的检查这样的参数,不过这个例子也能够检查)。
检查抛出的异常有三种方式,它们各自都有优缺点:
@Test注解有一个可选的参数,”expected”允许你设置一个Throwable的子类。如果你想要验证上面的canVote()方法抛出预期的异常,我们可以这样写:
简单明了,这个测试有一点误差,因为异常会在方法的某个位置被抛出,但不一定在特定的某行。
如果要使用JUnit框架中的ExpectedException类,需要声明ExpectedException异常。
然后你可以使用更加简单的方式验证预期的异常。
或者可以设置预期异常的属性信息。
除了可以设置异常的属性信息之外,这种方法还有一个优点,它可以更加精确的找到异常抛出的位置。在上面的例子中,在构造函数中抛出的未预期的(unexpected) IllegalArgumentException 异常将会引起测试失败,我们希望它在canVote()方法中抛出。
从另一个方面来说,如果不需要声明就更好了
它就像不需要的噪音一样,如果这样就很好了
或者:
或者至少可以将异常和信息当做参数传进去
在JUnit4之前的版本中,使用try/catch语句块检查异常
尽管这种方式很老了,不过还是非常有效的。主要的缺点就是很容易忘记在catch语句块之后需要写fail()方法,如果预期异常没有抛出就会导致信息的误报。我曾经就犯过这样的错误。
总之,这三种方法都可以测试预期抛出的异常,各有优缺点。对于我个人而言,我会选择第二种方法,因为它可以非常精确、高效的测试异常信息。
原文链接: javacodegeeks 翻译: ImportNew.com - 踏雁寻花
译文链接: http://www.importnew.com/10079.html
[ 转载请保留原文出处、译者和译文链接。]
开发人员常常使用单元测试来验证的一段儿代码的操作,很多时候单元测试可以检查抛出预期异常(expected exceptions)的代码。在Java语言中,JUnit是一套标准的单元测试方案,它提供了很多验证抛出的异常的机制。本文就探讨一下他们的优点。
我们拿下面的代码作为例子,写一个测试,确保canVote() 方法返回true或者false, 同时你也能写一个测试用来验证这个方法抛出的IllegalArgumentException异常。
检查抛出的异常有三种方式,它们各自都有优缺点:
1.@Test(expected…)
@Test注解有一个可选的参数,”expected”允许你设置一个Throwable的子类。如果你想要验证上面的canVote()方法抛出预期的异常,我们可以这样写:
2.ExpectedException
如果要使用JUnit框架中的ExpectedException类,需要声明ExpectedException异常。从另一个方面来说,如果不需要声明就更好了
3.Try/catch with assert/fail
在JUnit4之前的版本中,使用try/catch语句块检查异常总之,这三种方法都可以测试预期抛出的异常,各有优缺点。对于我个人而言,我会选择第二种方法,因为它可以非常精确、高效的测试异常信息。
原文链接: javacodegeeks 翻译: ImportNew.com - 踏雁寻花
译文链接: http://www.importnew.com/10079.html
[ 转载请保留原文出处、译者和译文链接。]
相关文章推荐
- Eclipse 快捷键 篇
- [na]tftp从linux下载文件
- 2016年六大OpenStack & Docker发展趋势预测
- 《VR入门系列教程》之9---谷歌纸盒
- 《VR入门系列教程》之8---GearVR
- 不允许创建临时变量,交换两个变量的内容
- Javaweb学习之JSP基础
- SQL Server中row_number的用法
- iOS应用发布中的一些细节
- Django笔记:2.数据库的建立
- 动手写一个快速集成网易新闻,腾讯视频,头条首页的ScrollPageView,显示滚动视图
- osg中漫游器的原理(一)
- JavaScript-----判断Caps Lock是否开启
- 125. Valid Palindrome
- Win7系统总是弹出"微软设备健康助手"窗口的故障原因及解决方法
- Java中的基础----编程规则,开发原则,面向对象设计原则、面向对象的特征
- 弹出框window.confirm()方法
- 《VR入门系列教程》之7---DK2和Crescent Bay
- 如何解决导入别人项目加载Maven库时,出现摇篮同步失败的错误?
- C++作业5