首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Junit5验证在执行过程中是否引发了异常

JUnit5 是一个流行的 Java 测试框架,用于编写和执行单元测试。在 JUnit5 中,你可以使用 assertThrows 方法来验证在执行过程中是否引发了特定的异常。

基础概念

assertThrows 是 JUnit5 提供的一个断言方法,用于检查代码块是否抛出了预期的异常。如果代码块没有抛出异常,或者抛出了不同类型的异常,测试将失败。

相关优势

  • 明确性assertThrows 明确指定了期望的异常类型,使得测试意图更加清晰。
  • 灵活性:你可以捕获并验证异常的详细信息,如异常消息和堆栈跟踪。
  • 集成性:作为 JUnit5 的一部分,它与其他 JUnit5 功能(如参数化测试)无缝集成。

类型

assertThrows 方法有两种重载形式:

  1. assertThrows(ExpectedException.class, Executable executable)
    • 第一个参数是期望的异常类。
    • 第二个参数是一个可执行代码块(通常是 lambda 表达式),用于执行可能抛出异常的代码。
  • assertThrows(ExpectedException.class, String message, Executable executable)
    • 第一个参数是期望的异常类。
    • 第二个参数是自定义的错误消息,当测试失败时显示。
    • 第三个参数是一个可执行代码块。

应用场景

当你需要验证某个方法在特定条件下是否抛出异常时,可以使用 assertThrows。例如,验证一个无效输入的方法是否抛出 IllegalArgumentException

示例代码

代码语言:txt
复制
import static org.junit.jupiter.api.Assertions.assertThrows;
import org.junit.jupiter.api.Test;

public class ExampleTest {

    @Test
    public void testException() {
        // 验证当输入为负数时,calculateSquareRoot 方法是否抛出 IllegalArgumentException
        assertThrows(IllegalArgumentException.class, () -> {
            ExampleClass.calculateSquareRoot(-1);
        });
    }
}

class ExampleClass {
    public static double calculateSquareRoot(double number) {
        if (number < 0) {
            throw new IllegalArgumentException("Number must be non-negative");
        }
        return Math.sqrt(number);
    }
}

参考链接

通过使用 assertThrows,你可以有效地验证代码在特定条件下的异常行为,从而提高代码的健壮性和可靠性。

相关搜索:在JUnit5中执行MockMVC.perform时出现异常是否在执行过程中不显示动态jQuery html修改?是否在存储过程中验证用户后返回用户信息?使用java和selenium在执行过程中获取以下类型的异常如何验证使用api在Dynamics crm中创建实体时是否触发了电子邮件?是否可以在命中URL之前在IIS中执行验证函数?在浏览器栈跨移动测试平台执行时,并行执行过程中会发生WebDriver异常在执行灵活的搜索查询时,无法计算表达式方法引发了'java.lang.illegalargumentexception‘异常是否可以在执行过程中更改tkinter列表框的选择模式?在new的执行过程中,是否可以在构造函数中传递不同的参数?在Jackson的反序列化过程中,如何在验证JSON负载时抛出异常?是否可以使用默认值在存储过程中执行插入操作?MariaDB有没有办法在侦听器中验证异常时停止testNG执行是否可以在触发器执行过程中获得触发器的相关信息?如何在Python中执行断言以验证项目是否在字典列表中在recaptcha中,google是否强制执行服务器端验证?在C++中,try块中的语句是否在throw语句之后执行(以防引发异常)?有没有办法在执行XNA开发时验证代码是否可以在360上运行?是否可以根据if条件在try catch块中抛出异常,以停止执行try块并开始执行catch块?通过在机器1上执行脚本来验证机器2上的webelements,而不是在机器2上开始执行。在Selenium或Serenity中是否可能?
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 开发必备之单元测试

    ​ 计算机世界里的软件产品通常是由模块组合而成的 模块又可以分成诸多子模块。 比如淘宝系统由搜索模块、商品模块、交易模块等组成,而交易模块又分成下单模块、 支付模块、发货模块等子模块,如此细分下去,最终的子模块是由不可再分的程序单 元组成的。对这些程序单元的测试,即称为单元测试(Unit Testing ,简称单测)。单元的粒度要根据实际情况判定,可能是类、方法等,在面向对象编程中,通常认为最小单元就是方法。单元测试的目的是在集成测试和功能测试之前对软件中的可测试单 元进 逐一检查和验证。单元测试是程序功能的基本保障,是软件产品上线非常重要的环。

    01

    Spring学习笔记(二十八)——springboot单元测试&JUnit5

    Spring Boot 2.2.0 版本开始引入 JUnit 5 作为单元测试默认库 作为最新版本的JUnit框架,JUnit5与之前版本的Junit框架有很大的不同。由三个不同子项目的几个不同模块组成。 JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage * JUnit Platform: Junit Platform是在JVM上启动测试框架的基础,不仅支持Junit自制的测试引擎,其他测试引擎也都可以接入。 * JUnit Jupiter: JUnit Jupiter提供了JUnit5的新的编程模型,是JUnit5新特性的核心。内部 包含了一个测试引擎,用于在Junit Platform上运行。 * JUnit Vintage: 由于JUint已经发展多年,为了照顾老的项目,JUnit Vintage提供了兼容JUnit4.x,Junit3.x的测试引擎。

    01

    JUnit5基础教程

    JUnit5是Java的单元测试框架,用于测试Java程序代码。作为一名软件测试工程师,掌握JUnit是非常重要的。我们将从头开始,一步步学习JUnit5的用法。 一、准备工作 1. 在Maven项目中添加JUnit5依赖: <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter</artifactId> <version>5.7.0</version> <scope>test</scope> </dependency> 2. 创建测试类:使用@Test注解标注测试方法,测试类名通常以Test结尾,如:MathTests。 public class MathTests { @Test void addition() { } } 二、第一条测试用例 我们在addition()方法中使用assertEquals()断言两个值相等: @Test void addition() { assertEquals(2, 1 + 1); } 三、运行测试 右键测试类名,选择“Run 'MathTests'”运行测试类。JUnit将检测@Test注解方法,执行它们,并报告测试结果。 四、JUnit注解 JUnit提供了许多测试相关注解: - @Test:标注测试方法 - @BeforeEach:每个测试方法前执行 - @AfterEach:每个测试方法后执行 - @RepeatedTest:重复测试多次 - @Timeout:测试方法超时时间 - @Disabled:忽略测试方法 - 等等 五、断言 我们可以在测试方法中使用各种断言来验证预期结果: - assertEquals(expected, actual) 两个值相等 - assertTrue(condition) 条件为真 - assertNull(object) 对象为空 - assertThrows(exceptionType, executable) 执行代码抛出异常 - 等等 六、测试套件与测试分组 JUnit支持把多个相关测试组织在一起: - @Suite用于注解测试套件类 - @RunWith(Suite.class)用于启动测试套件 - @Categories用于给测试类或方法添加分类 - 然后可以在套件中包含指定分类的测试 七、参数化测试 使用@ValueSource等注解,可以运行同一测试逻辑针对不同输入。 希望此详细教程能够帮助初级工程师彻底掌握JUnit5的使用。请在学习或使用中遇到任何问题,随时与我讨论。

    02
    领券