JUnit测试异常

作者: 乘瓠散人 | 来源:发表于2017-10-10 21:57 被阅读96次

假如需要测试下面的类:

public class Student {
  public boolean canVote(int age) {
      if (i<=0) throw new IllegalArgumentException("age should be +");
      if (i<18) return false;
      else return true;
  }
}

测试抛出的异常有三种方法:

  1. @Test ( expected = Throwable.class )
@Test(expected = IllegalArgumentException.class)
public void canVoteExp() {
    Student student = new Student();
    student.canVote(0);
}

这种测试有一点误差,因为异常会在方法的某个位置被抛出,但不一定在特定的某行。

  1. ExpectedException
    如果要使用JUnit框架中的ExpectedException类,需要声明ExpectedException异常。

@Rule
public ExpectedException thrown = ExpectedException.none();

然后可以使用更加简单的方式验证预期的异常

@Test
public void canVoteExp() {
    Student student = new Student();
    thrown.expect(IllegalArgumentException.class);
    student.canVote(0);
}

还可以设置预期异常的属性信息

@Test
public void canVoteExp() {
    Student student = new Student();
    thrown.expect(IllegalArgumentException.class);
    thrown.expectMessage("age should be +");
    student.canVote(0);
}

这种方法可以更加精确的找到异常抛出的位置。

  1. try/catch with assert/fail
    在JUnit4之前的版本中,使用try/catch语句块检查异常
@Test
public void canVoteExp() {
    Student student = new Student();
    try {
        student.canVote(0);
    } catch (IllegalArgumentException e) {
        assertThat(e.getMessage(), containsString("age should be +"));
    }
    fail("expected IllegalArgumentException for non + age");
}

尽管这种方法很老了,但是还是非常有效的。主要的缺点就是很容易忘记在catch语句块之后写fail()方法,如果预期异常没有抛出就会导致信息的误报。

相关文章

  • JUnit4.12入门实践

    内容概要: 为什么要做单元测试 JUnit简介 单元测试规范 JUnit4常用注解 JUnit4异常和超时测试 J...

  • JUnit测试异常

    假如需要测试下面的类: 测试抛出的异常有三种方法: @Test ( expected = Throwable.cl...

  • Android 在 Junit 测试类中使用 JSON 报 “M

    1、测试代码 2、异常信息以及原因 JSON包含在Android SDK中,JUnit单元测试无法使用,会抛异常;...

  • junit多线程测试异常

    问题起因 有一次要测试下多线程删除redis数据,会不会有问题,比如边界条件没控制好啥的,导致多删数据了,我就想着...

  • IDEA配置JUnit进行单元测试

    安装JUnitGenerator V2.0 JUnit可以运行JUnit测试文件,但无法自动生成JUnit测试代码...

  • TestNG并发加速自动化测试执行

    简介 TestNG是一个开源自动化测试工具,TestNG源于Junit,最初用来做单元测试,可支持异常测试,忽略测...

  • JUnit

    JUnit是用于编写可重复测试的单元测试框架,可实现自动化测试。JUnit官方API文档:http://junit...

  • 自动装配bean 2.2节

    使用junit测试,自动装配 不是junit测试的话,会在web.xml中配置识别注解的xml junit使用下面...

  • 测试

    Junit测试

  • junit测试--java13(09/12/2015)

    Junit测试: 1、右键--build path--add library--Junit--Junit4--fi...

网友评论

    本文标题:JUnit测试异常

    本文链接:https://www.haomeiwen.com/subject/dqwbyxtx.html