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/



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

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

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • UE4->Plugin 认识UE4插件 1「建议收藏」

    UE4->Plugin 认识UE4插件 1「建议收藏」本文带大家认识UE4的插件,PluginUE4Engine中插件代码占很大一部分,可参考下图,里面的Editor,Developer,Runtime,Slate举例都是大家比较熟悉的几个1>看下图的中Json,其实就是我们的.plugin文件{ “FileVersion”:3, //文件版本 “Version”:1, //Plugin版本 “VersionName”:”1.0″, //版本名称 “FriendlyName”:”Taskp”, //插件名称 “Des

    2022年10月4日
  • 中文情感词典的构建与使用_文本情感识别

    中文情感词典的构建与使用_文本情感识别首先,国外英文的情感分析已经取得了很好的效果,得益于英文单词自身分析的便捷性与英文大量的数据集WordNet。但由于中文的多变性,语义的多重性与数据集的缺乏,使得国内的情感分析暂落后于国外。本文将记录博主在项目中构建情感词典的经验,欢迎大家指正。我们首先将情感词典分为通用情感词典与专用情感词典。1.通用情感词典的构建通用情感词典的构建主要是通过将目前开源的情感词典整合起来,筛去重复和无…

    2022年8月23日
  • webpack-dev-server简记

    webpack-dev-server简记

    2022年3月5日
  • Memcached, Redis, MongoDB区别

    Memcached, Redis, MongoDB区别

    2021年11月6日
  • REST API和SOAP API区别[通俗易懂]

    REST API和SOAP API区别[通俗易懂]RESTAPI优点:1.轻量级的解决方案,不必向SOAP那样要构建一个标准的SOAPXML。2.可读性比较好:可以把URL的名字取得有实际意义。3.不需要SDK支持:直接一个Http请求就可以,但是SOAP则可能需要使用到一些Webservice的类库(例如Apache的Axis)缺点:1.复杂的应用中,URL可能非常长,而且不容易解析。SOAPAPI优点:1.定…

    2022年7月13日
  • 大数据平台建设方案(项目需求与技术方案)[通俗易懂]

    大数据平台建设方案(项目需求与技术方案)[通俗易懂]一、项目背景 “十三五”期间,随着我国现代信息技术的蓬勃发展,信息化建设模式发生根本性转变,一场以云计算、大数据、物联网、移动应用等技术为核心的“新IT”浪潮风起云涌,信息化应用进入一个“新常态”。***(某政府部门)为积极应对“互联网+”和大数据时代的机遇和挑战,适应全省经济社会发展与改革要求,大数据平台应运而生。在这里我还是要推荐下我自己建的大数据学习交流qq裙: 957205…

    2022年4月30日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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