JUnit中对Exception的判断

JUnit中对Exception的判断

说来惭愧,虽然之前已经看过JUnit的源码了,也写了几篇博客,但是长时间不写Test Case,今天想要写抛Exception相关的test case时,竟然不知道怎么写了。。。。。好记性不如烂笔头,记下来先~~




对于使用验证Test Case方法中抛出的异常,我起初想到的是一种比较简单的方法,但是显得比较繁琐:

JUnit中对Exception的判断
    @Test
ExpandedBlockStart.gif    

public
 
void
 testOldStyle() 
{

ExpandedSubBlockStart.gif        

try
 
{

JUnit中对Exception的判断            

double
 value 
=
 Math.random();
ExpandedSubBlockStart.gif            

if
(value 
<
 
0.5

{

JUnit中对Exception的判断                

throw
 
new
 IllegalStateException(

test

);
JUnit中对Exception的判断            }


JUnit中对Exception的判断            Assert.fail(


Expect IllegalStateException

);
ExpandedSubBlockStart.gif        }

 
catch
(IllegalStateException e) 
{

JUnit中对Exception的判断        }


JUnit中对Exception的判断    }



Google了一下,找到另外几种更加方便的方法:1,使用Test注解中的expected字段判断抛出异常的类型。2,使用ExpectedException的Rule注解。


个人偏好用Test注解中的expected字段,它先的更加简洁,不管读起来还是写起来都很方便,并且一目了然:

JUnit中对Exception的判断
    @Test(expected 
=
 IllegalStateException.
class
)
ExpandedBlockStart.gif    

public
 
void
 testThrowException() 
{

JUnit中对Exception的判断        

throw
 
new
 IllegalStateException(

test

);
JUnit中对Exception的判断    }


JUnit中对Exception的判断    
JUnit中对Exception的判断    @Test(expected 

=
 IllegalStateException.
class
)
ExpandedBlockStart.gif    

public
 
void
 testNotThrowException() 
{

JUnit中对Exception的判断        System.out.println(


No Exception throws

);
JUnit中对Exception的判断    }



对Rule注解的使用(只有在JUnit4.7以后才有这个功能),它提供了更加强大的功能,它可以同时检查异常类型以及异常消息内容,这些内容可以只包含其中的某些字符,ExpectedException还支持使用hamcrest中的Matcher,默认使用IsInstanceOf和StringContains Matcher。在BlockJUnit4ClassRunner的实现中,每一个Test Case运行时都会重新创建Test Class的实例,因而在使用ExpectedException这个Rule时,不用担心在多个Test Case之间相互影响的问题:

JUnit中对Exception的判断
    @Rule
JUnit中对Exception的判断    

public
 
final
 ExpectedException expectedException 
=
 ExpectedException.none();
JUnit中对Exception的判断    
JUnit中对Exception的判断    @Test
ExpandedBlockStart.gif    

public
 
void
 testThrowExceptionWithRule() 
{

JUnit中对Exception的判断        expectedException.expect(IllegalStateException.

class
);
JUnit中对Exception的判断        
JUnit中对Exception的判断        

throw
 
new
 IllegalStateException(

test

);
JUnit中对Exception的判断    }


JUnit中对Exception的判断    
JUnit中对Exception的判断    @Test
ExpandedBlockStart.gif    

public
 
void
 testThrowExceptionAndMessageWithRule() 
{

JUnit中对Exception的判断        expectedException.expect(IllegalStateException.

class
);
JUnit中对Exception的判断        expectedException.expectMessage(


fail

);
JUnit中对Exception的判断        
JUnit中对Exception的判断        

throw
 
new
 IllegalStateException(
“expect fail

);
JUnit中对Exception的判断    }



在stackoverflow中还有人提到了使用google-code中的catch-exception工程,今天没时间看了,回去好好研究一下。地址是:
http://code.google.com/p/catch-exception/



版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/109016.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • Python爱心表白代码[通俗易懂]

    Python爱心表白代码[通俗易懂]调用turtle模块,然后在屏幕上画一个爱心,并在爱心的中间写上表白的话,爱心的右下角显示要表白的人,表白的话及要表白的人均可设置。画完爱心大约10秒,表白情话及需要表白的人均可输入中文,程序运行截图:importturtle#导入python中的画画工具包importtimedefLittleHeart():foriinrange(200):turtle.right(1)turtle.forward(2)love=input(‘请输入表白语

  • 【工具教程】Dreamweaver教程「建议收藏」

    【工具教程】Dreamweaver教程「建议收藏」1.Dreamweaver代码不自动提示的问题Dreamweaver代码不自动提示的问题,不论是HTML还是CSS,在网上搜索了半天,大部分是Ctrl+Space的方法,也就是说Dreamweaver的代码自动提示快捷键和输入法切换相冲突,按他们的方法,我的根本解决不了。后来终于找到了解决方法:打开Dreamweaver的“编辑”》“首选参数”(快捷键Ctrl+U)》“常规”》右边的“编

  • 【值得收藏】一份非常完整的Mysql规范

    做一个积极的人编码、改bug、提升自己我有一个乐园,面向编程,春暖花开!本文转载在,在原有内容基础上结合阿里巴巴Java开发手册中Mysql数据库章节的介绍,加上自己的理解和说明,整理而成。涉及的内容较多,建议收藏后仔细阅读!一、数据库命名规范数据库的表名、字段名必须使用小写字母或数字(不要使用驼峰哦),并禁止出现数字开头,禁止两个下划线中间只出现数字。正例:aliyun _ …

  • 地图慧制作地图

    地图慧制作地图

  • C#用什么开发_hbase写数据流程

    C#用什么开发_hbase写数据流程最近公司程序需要嵌入各个浏览器的插件。首先

  • hostapd学习「建议收藏」

    hostapd学习「建议收藏」hostapd简介工作模式 作用Master(AP) 成为无线接入点提供无线接入服务Managed(STA) 作为客户端连接其他无线接入点Monitor 监听附近所有无线流量Ad-hoc 多台计算机直接相连WiFi的几种模式hostapd能够使得无线网卡切换为master模式,模拟AP(通常可以认为是路由器)功能,也就是我们说的软AP(SoftAP)。hostapd的功能就是作

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号