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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法…

    台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法…有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始”菜单或者左下角的windows标志处,找到“控制面板”然后找到”windowsupdate”把这微软默认的更新程序给关闭掉,可解决!(经测试,此方法能解决大多数这种问题)如果解决…

    2022年6月15日
    159
  • c/c++面试题大汇总_北京易联达C语言面试咋样

    c/c++面试题大汇总_北京易联达C语言面试咋样c++的知识点

    2022年8月6日
    7
  • 官网svn提交到代码库,但是不能同步到web目录

    官网svn提交到代码库,但是不能同步到web目录

    2021年6月14日
    251
  • 状态机编程_vivado状态机

    状态机编程_vivado状态机给定一个长度为 N 的数组,数组中的第 i 个数字表示一个给定股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润,你最多可以完成 k 笔交易。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。一次买入卖出合为一笔交易。输入格式第一行包含整数 N 和 k,表示数组的长度以及你可以完成的最大交易数量。第二行包含 N 个不超过 10000 的正整数,表示完整的数组。输出格式输出一个整数,表示最大利润。数据范围1≤N≤105,1≤k≤100输入样例1:3 22

    2022年8月8日
    7
  • YUI Compressor

    YUI Compressor简介根据雅虎卓越性能团队的说法,40%到60%的雅虎用户拥有空闲缓存体验,所有页面浏览量中约有20%是使用空缓存完成的(请参阅TenniTheurer在YUIBlog上的这篇文章)有关浏览器缓存使

    2022年7月1日
    23
  • MyBatisPlus IService详解

    IService的使用方法需要配置MyBatisPlus才能使用publicinterfaceUserService2extendsIService<User>{}@ServicepublicclassUserServiceImplextendsServiceImpl<UserMapper,User>implementsUserService2{}@RestControllerpublicclassUserController.

    2022年4月7日
    202

发表回复

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

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