JUnit中对Exception的判断

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

对于使用验证Test Case方法中抛出的异常,我起初想到的是一种比较简单的方法,但是显得比较繁琐:
    @Test
    
public   void  testOldStyle()  {
        
try {
            
double value = Math.random();
            
if(value < 0.5{
                
throw new IllegalStateException("test");
            }

            Assert.fail(
"Expect IllegalStateException");
        }
 catch(IllegalStateException e) {
        }

    }

Google了一下,找到另外几种更加方便的方法:1,使用Test注解中的expected字段判断抛出异常的类型。2,使用ExpectedException的Rule注解。
个人偏好用Test注解中的expected字段,它先的更加简洁,不管读起来还是写起来都很方便,并且一目了然:
    @Test(expected  =  IllegalStateException. class )
    
public   void  testThrowException()  {
        
throw new IllegalStateException("test");
    }

    
    @Test(expected 
=  IllegalStateException. class )
    
public   void  testNotThrowException()  {
        System.out.println(
"No Exception throws");
    }

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

    
    @Test
    
public   void  testThrowExceptionAndMessageWithRule()  {
        expectedException.expect(IllegalStateException.
class);
        expectedException.expectMessage(
"fail");
        
        
throw new IllegalStateException("expect fail");
    }

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

相关文章
Mockito框架抛出NullPointerException
一文详细讲解Mockito框架是怎么抛出NullPointerException的整个过程和解决方式。
6034 0
|
6月前
|
搜索推荐 Java 开发者
org.springframework.context.ApplicationContextException: Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException 问题处理
【5月更文挑战第14天】org.springframework.context.ApplicationContextException: Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException 问题处理
567 1
|
5月前
|
Java Spring
【ERROR】Exception in thread “main“ org.springframework.beans.factory.NoSuchBeanDefinitionException
【ERROR】Exception in thread “main“ org.springframework.beans.factory.NoSuchBeanDefinitionException
42 0
|
druid 数据库连接
Druid出现DruidDataSource - recyle error - recyle error java.lang.InterruptedException: null异常排查与解决...
Druid出现DruidDataSource - recyle error - recyle error java.lang.InterruptedException: null异常排查与解决...
469 0
|
前端开发 Cloud Native Java
已解决‘Failed to start bean ‘documentationPluginsBootstrapper‘; nested exception is java.lang.NullPoint
已解决‘Failed to start bean ‘documentationPluginsBootstrapper‘; nested exception is java.lang.NullPoint
161 0
PowerMock - java.lang.RuntimeException: test should never throw an exception to this level
PowerMock - java.lang.RuntimeException: test should never throw an exception to this level
756 0
PowerMock - java.lang.RuntimeException: test should never throw an exception to this level
|
Java 编译器
Java - try、catch、finally(包含 return)
Java - try、catch、finally(包含 return)
194 0