多语言展示
当前在线:1667今日阅读:176今日分享:34

Java中测试异常的多种方式

处理java编译过程中出现的异常问题是我们每个工程师所要掌握的,所以我就教大家几种处理异常的方式
工具/原料

eclipse

方法/步骤
1

*先放源码:实体类:public class Person {private String name;private int age;public String getName(){   return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age){   if (age < 0 ) {    throw new IllegalArgumentException('age is invalid');   }   this.age = age;}}测试:public class abc {@Testpublic void aaa(){Person person = new Person();person.setAge(-1);}}

2

*1.try…catch…finally方式public class abc {@Testpublic void aaa(){Person person = new Person();try {person.setAge(-1);} catch (Exception e) {} }}

3

*2.hrows抛异常public class abc {@Testpublic void aaa() throws Exception{FileInputStream fis = new FileInputStream('xxx.txt');fis.close();}}

4

*3.junit annotation方式 JUnit中提供了一个expected的annotation来检查异常。@Test(expected = IllegalArgumentException.class)    public void shouldGetExceptionWhenAgeLessThan0() {         Person person = new Person();        person.setAge(-1);    }这种方式看起来要简洁多了,但是无法检查异常中的消息。

5

*4.ExpectedException方式  JUnit7以后提供了一个叫做ExpectedException的Rule来实现对异常的测试。 @Rule public ExpectedException exception = ExpectedException.none();  @Test    public void shouldGetExceptionWhenAgeLessThan0() {        Person person = new Person();         exception.expect(IllegalArgumentException.class);         exception.expectMessage(containsString('age is invalid'));         person.setAge(-1);    }这种方式既可以检查异常类型,也可以验证异常中的消息。

6

*5.catch-exception库     有个catch-exception库也可以实现对异常的测试。     首先引用该库。pom.xml            com.googlecode.catch-exception            catch-exception            1.2.0            test        然后这样书写测试。@Test    public void shouldGetExceptionWhenAgeLessThan0() {        Person person = new Person();        catchException(person).setAge(-1);        assertThat(caughtException(),instanceOf(IllegalArgumentException.class)); assertThat(caughtException().getMessage(), containsString('age is invalid'));    }这样的好处是可以精准的验证异常是被测方法抛出来的,而不是其它方法抛出来的。catch-exception库还提供了多种API来进行测试。先加载fest-assertion库。             org.easytesting            fest-assert-core            2.0M10        然后可以书写BDD风格的测试。 @Test    public void shouldGetExceptionWhenAgeLessThan0() {        // given        Person person = new Person();        // when        when(person).setAge(-1);        // then        then(caughtException())                .isInstanceOf(IllegalArgumentException.class)                .hasMessage('age is invalid')                .hasNoCause();    }如果喜欢Hamcrest风格的验证风格的话,catch-exception也提供了相应的Matcher API。 @Test    public void shouldGetExceptionWhenAgeLessThan0() {        // given        Person person = new Person();        // when        when(person).setAge(-1);        // then        assertThat(caughtException(), allOf(                instanceOf(IllegalArgumentException.class)                ,hasMessage('age is invalid')                ,hasNoCause()));    }

推荐信息