`

JUnit测试预期异常

 
阅读更多

我们拿下面的代码作为例子,写一个测试,确保canVote() 方法返回true或者false, 同时你也能写一个测试用来验证这个方法抛出的IllegalArgumentException异常。

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

(Guava类库中提供了一个作参数检查的工具类--Preconditions类,也许这种方法能够更好的检查这样的参数,不过这个例子也能够检查)。

检查抛出的异常有三种方式,它们各自都有优缺点:

1.@Test(expected…)

@Test注解有一个可选的参数,"expected"允许你设置一个Throwable的子类。如果你想要验证上面的canVote()方法抛出预期的异常,我们可以这样写:

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

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

2.ExpectedException

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

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

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

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

或者可以设置预期异常的属性信息。

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

除了可以设置异常的属性信息之外,这种方法还有一个优点,它可以更加精确的找到异常抛出的位置。在上面的例子中,在构造函数中抛出的未预期的(unexpected) IllegalArgumentException 异常将会引起测试失败,我们希望它在canVote()方法中抛出。

从另一个方面来说,如果不需要声明就更好了

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

它就像不需要的噪音一样,如果这样就很好了

expect(RuntimeException.class)

或者:

expect(RuntimeException.class, “Expected exception message”)

或者至少可以将异常和信息当做参数传进去

thrown.expect(IllegalArgumentException.class, “age should be +ve”);

3.Try/catch with assert/fail

在JUnit4之前的版本中,使用try/catch语句块检查异常

分享到:
评论

相关推荐

    自动饮料机Junit测试(软件测试与质量保证实验).rar

    本实验“自动饮料机Junit测试”旨在帮助学生深入理解和应用单元测试,特别是在Java编程环境下。单元测试是一种针对程序代码最小可测试单元进行验证的方法,通常这个单元是函数或方法。Junit是Java领域广泛使用的单元...

    junit测试_java_JUnit_JUnit测试_

    异常测试(Exception Testing),可以通过`@Test(expected = Exception.class)`来检查代码是否抛出了预期的异常;还有定时器测试(Timeouts),可以设置测试方法的最大执行时间,超过这个时间则视为失败。 总之,...

    Junit测试jar包

    4. **异常测试**:如果预期代码应抛出异常,可以使用`@Test(expected = Exception.class)`来捕获并验证异常类型。 5. **测试注解**:JUnit5引入了更多的注解,如`@Before`和`@After`用于定义在每个测试方法执行前后...

    Junit测试学习文档

    《Junit测试学习文档》 在软件开发过程中,单元测试是一项至关重要的工作,它能确保代码的正确性,提高代码质量,并为后续的维护和重构提供保障。Junit作为Java编程语言中最流行的单元测试框架,是每个Java开发者...

    JUnit测试代码示例

    5. **异常测试**:JUnit3允许你测试一个方法是否抛出了预期的异常,例如`try { ... } catch (Exception e) { fail("异常未正确抛出"); }` 6. **测试运行器**:JUnit3默认的运行器会顺序执行所有的测试,如果有测试...

    javaweb中.java文件测试需要的框架(junit测试).rar

    本压缩包文件"javaweb中.java文件测试需要的框架(junit测试).rar"显然是为了帮助开发者理解如何在Java Web项目中使用JUnit进行测试。 **JUnit框架详解** JUnit是一个基于注解的测试框架,它的核心功能包括: 1....

    junit测试案例程序

    在这个“junit测试案例程序”中,我们可以找到一些基本的JUnit测试用例示例,这对于初学者来说是极好的学习资源。 首先,JUnit的核心概念是测试类和测试方法。一个测试类通常对应于被测试的业务逻辑类,而测试方法...

    junit测试小例子

    `@Expected`注解可以指定测试方法预期抛出的异常类型,如果方法没有抛出预期的异常或者抛出了不同类型的异常,测试就会失败。 JUnit还支持断言(Assertions),这是测试的核心部分。通过使用如`assertEquals`、`...

    junit测试测试代码

    下面将详细阐述JUnit测试的相关知识点。 1. **JUnit简介**: JUnit是由Ernst von Reiss和Kent Beck开发的一个开源项目,它是XUnit测试框架家族的一员,专为Java设计。JUnit提供了注解、断言、测试套件、定时器等...

    在Eclipse中使用JUnit4进行单元测试

    创建JUnit测试类是单元测试的第一步。在Eclipse中,右键点击项目,选择"New" &gt; "JUnit Test Case"。在此过程中,需要选择要测试的源代码类以及要测试的方法。测试类通常会继承自`org.junit.Test`注解的基类,并且每...

    junit测试小demo

    在这个名为"junit测试小demo"的压缩包文件中,我们可以预期它包含了一些关于如何使用Junit进行单元测试的示例代码或教程。 首先,让我们来理解一下Junit的基本概念。Junit是一个开源项目,由Eclipse基金会维护,...

    junit4测试jar包

    3. **异常测试**:`@Test(expected = Exception.class)`可以用来测试方法是否抛出了预期的异常。 4. **测试套件(Test Suites)**:`@Suite`注解允许将多个测试类组合成一个测试套件,便于一起运行。 5. **参数化...

    生成junit测试类

    这篇博文“生成junit测试类”可能讲述了如何使用特定工具或方法来自动化创建JUnit测试类的过程。下面将详细讨论JUnit测试、EasyMock和PowerMock等相关知识点。 1. JUnit测试:JUnit是Java编程语言的一个开源测试...

    junit测试工具以及安装方法

    3. **异常测试**:如果预期方法应抛出特定异常,可以使用`@Test(expected = Exception.class)`注解。 4. **测试套件**:多个测试类可以通过`@Suite`注解组合成一个测试套件,便于批量运行。 **三、JUnit的安装与...

    JUnit_Test_Code.zip_JUnit_JUnit测试_junit测试脚本

    本资源"JUnit_Test_Code.zip"包含了一份关于如何使用JUnit进行测试的实例,以及图文并茂的讲解,对于理解和实践JUnit测试脚本非常有帮助。 在Java开发中,单元测试是对软件中的最小可测试单元进行检查和验证的过程...

    junit测试.zip

    这个“junit测试.zip”文件包含了JUnit库的jar包,它用于帮助进行程序的单元测试。单元测试是对软件中的最小可测试单元进行检查和验证,通常是一个方法或一个类。 在Java开发中,单元测试是质量保证的关键步骤,...

    Java单元测试JUnit4.7

    在实际使用中,开发人员通常会结合构建工具如Maven或Gradle,以及IDE如Eclipse、IntelliJ IDEA来运行JUnit测试。这些工具能够自动化测试执行,生成测试报告,帮助分析和调试。 总的来说,JUnit 4.7作为Java单元测试...

    junit4测试源码

    异常测试也是JUnit4的一个重要特性,可以使用`assertThrows()`来断言预期的异常是否被抛出。例如,`assertThatThrownBy(() -&gt; someCode()).isInstanceOf(ExpectedException.class)`。 JUnit4还引入了`Assume`类,...

    Junit单元测试指南

    6. `ExpectedException`:预期异常测试,可以检查方法是否抛出了预期的异常。 六、异常处理 在测试中,有时我们需要验证方法是否正确抛出了预期的异常。可以使用`@Test(expected = Exception.class)`注解,指定预期...

Global site tag (gtag.js) - Google Analytics