首页
学习
活动
专区
工具
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中是否可能?
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Java测试框架——JUnit详解(4&5)

官方资料 JUnit4 常用注解和断言 代码测试搭建一个JUnit测试环境 生命周期 忽略测试 断言测试 异常测试 测试时间 套件测试 JUnit5 JUnit5对比JUnit4的好处 导包的改变 注解的改变...可集成:JUnit 可以与大多数流行的 Java IDE 和构建工具集成,开发人员可以开发过程中轻松地执行单元测试。...: @Test注解方法上标记方法为测试方法,以便构建工具和 IDE 能够识别并执行它们。...JUnit 5入了一些新的断言,比如以下这些: assertIterableEquals()使用equals()对两个迭代项进行深度验证。...assertLinesMatch()验证两个字符串列表是否匹配;它接受期望参数中的正则表达式。 assertAll() 将多个断言分组在一起。附加的好处是所有的断言都会被执行,即使单个断言失败。

1.6K30

SpringBoot对单元测试支持、常用单元测试功能使用实例

比如,使用 JUnit5时, 默认的 spring-boot- starter-test 依赖类库已经无法满足,需要手动|入 junit-jupiter. <!...原因很简单,从 JUnit4 升级到 JUnit5 时, testInsert 方法 上的@Test 注解变了。... JUnit4中默认使用的@Test 注解为 org.junit.Test,而在 JUnit5 中需要使用 org.junit.jupiter.api.Test.因此,如果在升级的过程中出现莫名其妙的空指针异常时...Web 应用单元测试 面向对象的程序设计中,模拟对象(mock object)是以可控的方式模拟真实对象行为的假对象。在编程过程中,通常通过模拟一些输入数据,来验证程序是否达到预期效果。...整个单元测试包含以下步骤:准备测试环境、执行 MockMvc 请求、 添加验证断言、添加结果处理器、得到 MvcResult 进行自定义断言/进行下一步的异步请求、卸载测试环境。

1.7K30
  • Java 后端自动化测试

    行为:Mock 可以测试中模拟更复杂的行为,如条件返回或引发异常,而 Stub 通常只提供简单的固定返回值。...验证:Mock 对象可以测试后验证方法是否被正确调用,包括调用次数和参数,而 Stub 通常不进行这种验证。 测试覆盖率 测试覆盖率,反映了测试用例对软件代码的覆盖程度,通常以百分比来表示。...自动化测试常用工具 Build Tool 通常情况下,构建工具(如 Maven、Gradle)会在项目构建过程中自动执行测试用例。...JUnit5 断言 断言是测试用例最重要的组成部分。 断言可以用来验证方法的行为是否符合预期,并在断言失败时使测试用例失败,进而体现到最终的测试报告中。...assertSame:用于验证两个对象是否是同一个对象。 assertNotSame:用于验证两个对象是否不是同一个对象。 assertThrows:用于验证方法是否抛出了指定的异常

    11310

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

    * JUnit Jupiter: JUnit Jupiter提供了JUnit5的新的编程模型,是JUnit5新特性的核心。内部 包含了一个测试引擎,用于Junit Platform上运行。...,下方会有详细介绍 * @DisplayName :为测试类或者测试方法设置展示名称 * @BeforeEach :表示每个单元测试之前执行 * @AfterEach :表示每个单元测试之后执行...JUnit 5 内置的断言可以分成如下几个类别: 检查业务逻辑返回的数据是否合理。 所有的测试运行结束以后,会有一个详细的测试报告; 1)、简单断言 用来对单个值进行简单的验证。...异常断言 JUnit4时期,想要测试方法的异常情况时,需要用@Rule注解的ExpectedException变量还是比较麻烦的。...迁移指南 Junit4d进行迁移到Junit5的时候需要注意如下的变化: * 注解 org.junit.jupiter.api 包中,断言 org.junit.jupiter.api.Assertions

    1.3K10

    Spring Boot 集成 JUnit5,更优雅单元测试!

    其实单测是开发人员必备技能,只不过很多开发人员开发任务太重导致调试完就不管了,没有系统化得单元测试,单元测试系统重构时能发挥巨大的作用,可以重构后快速测试新的接口是否与重构前有出入。...JUnit Vintage:这个模块是兼容JUnit3、JUnit4版本的测试引擎,使得旧版本的自动化测试也可以JUnit5下正常运行。...junit-vintage-engine               常用注解 @BeforeEach:每个单元测试方法执行前都执行一遍...@BeforeAll:每个单元测试方法执行执行一遍(只执行一次) @DisplayName("商品入库测试"):用于指定单元测试的名称 @Disabled:当前单元测试置为无效,即单元测试时跳过该测试... testNotNull() {         assertNotNull(new Object());     } assertThrows用来判断执行抛出的异常是否符合预期,并可以使用异常类型接收返回值进行其他操作

    1K20

    Spring Boot 集成 JUnit5,让单元测试变得优雅!

    其实单测是开发人员必备技能,只不过很多开发人员开发任务太重导致调试完就不管了,没有系统化得单元测试,单元测试系统重构时能发挥巨大的作用,可以重构后快速测试新的接口是否与重构前有出入。...JUnit Vintage:这个模块是兼容JUnit3、JUnit4版本的测试引擎,使得旧版本的自动化测试也可以JUnit5下正常运行。...@BeforeAll:每个单元测试方法执行执行一遍(只执行一次) @DisplayName("商品入库测试"):用于指定单元测试的名称 @Disabled:当前单元测试置为无效,即单元测试时跳过该测试...Jupiter提供了强大的断言方法用以验证结果,使用时需要借助java8的新特性lambda表达式,均是来自org.junit.jupiter.api.Assertions包的static方法。...testNotNull() { assertNotNull(new Object()); } assertThrows用来判断执行抛出的异常是否符合预期,并可以使用异常类型接收返回值进行其他操作 @

    87620

    SpringBoot2---单元测试(Junit5

    单元测试 JUnit5 的变化 JUnit5常用注解 常用注解使用演示 断言机制(assertions) 1、简单断言 2、数组断言 3、组合断言 4、异常断言 5、超时断言 6、快速失败 4、前置条件...,指定测试次数,会重复指定次数 @DisplayName :为测试类或者测试方法设置展示名称 @BeforeEach :表示每个单元测试之前执行 @AfterEach :表示每个单元测试之后执行 @...JUnit 5 内置的断言可以分成如下几个类别: 检查业务逻辑返回的数据是否合理。 所有的测试运行结束以后,会有一个详细的测试报告; ---- 1、简单断言 用来对单个值进行简单的验证。...assertAll("Math", () -> assertEquals(2, 1 + 1), () -> assertTrue(1 > 0) ); } ---- 4、异常断言 JUnit4...而JUnit5提供了一种新的断言方式Assertions.assertThrows() ,配合函数式编程就可以进行使用 第一个参数是预期出现的异常类型,第二个参数是Executable 接口,第三个参数是不符合第一个异常时抛出的信息

    1.3K20

    Springboot集成JUnit5优雅进行单元测试

    其实单测是开发人员必备技能,只不过很多开发人员开发任务太重导致调试完就不管了,没有系统化得单元测试,单元测试系统重构时能发挥巨大的作用,可以重构后快速测试新的接口是否与重构前有出入。 简介 ?...JUnit Vintage:这个模块是兼容JUnit3、JUnit4版本的测试引擎,使得旧版本的自动化测试也可以JUnit5下正常运行。...@BeforeAll:每个单元测试方法执行执行一遍(只执行一次) @DisplayName("商品入库测试"):用于指定单元测试的名称 @Disabled:当前单元测试置为无效,..., 3}):参数化测试提供数据 断言 JUnit Jupiter提供了强大的断言方法用以验证结果,使用时需要借助java8的新特性lambda表达式,均是来自org.junit.jupiter.api.Assertions...("测试断言NotNull") void testNotNull() { assertNotNull(new Object()); } assertThrows用来判断执行抛出的异常是否符合预期

    2.3K20

    Spring Boot 集成 JUnit5,更优雅单元测试!

    其实单测是开发人员必备技能,只不过很多开发人员开发任务太重导致调试完就不管了,没有系统化得单元测试,单元测试系统重构时能发挥巨大的作用,可以重构后快速测试新的接口是否与重构前有出入。 简介 ?...JUnit Vintage :这个模块是兼容JUnit3、JUnit4版本的测试引擎,使得旧版本的自动化测试也可以JUnit5下正常运行。...@BeforeAll:每个单元测试方法执行执行一遍(只执行一次) @DisplayName("商品入库测试"):用于指定单元测试的名称 @Disabled:当前单元测试置为无效,即单元测试时跳过该测试...Jupiter提供了强大的断言方法用以验证结果,使用时需要借助java8的新特性lambda表达式,均是来自org.junit.jupiter.api.Assertions包的static方法。..."测试断言NotNull") void testNotNull() { assertNotNull(new Object()); } assertThrows用来判断执行抛出的异常是否符合预期

    1.4K20

    Spring Boot中使用JUnit5进行单元测试

    今天我就系统完整地学习总结一下Spring Boot中使用JUnit5框架进行单元测试。其实本节主要还是学习JUnit5的使用。有一句话说的好,我可以不用,但我必须会用。...JUnit Jupiter: JUnit Jupiter提供了JUnit5的新的编程模型,是JUnit5新特性的核心。内部 包含了一个测试引擎,用于Junit Platform上运行。...,下方会有详细介绍 @DisplayName :为测试类或者测试方法设置展示名称 @BeforeEach :表示每个单元测试之前执行 @AfterEach :表示每个单元测试之后执行 @BeforeAll...我们直接在类上使用@SpringBootTest注解就可以了。 3.断言机制 断言(assertions)是测试方法中的核心部分,用来对测试需要满足的条件进行验证。...JUnit4时期,想要测试方法的异常情况时,需要用@Rule注解的ExpectedException变量还是比较麻烦的。

    1.4K30

    Spring Boot 集成 JUnit5,更优雅单元测试!

    其实单测是开发人员必备技能,只不过很多开发人员开发任务太重导致调试完就不管了,没有系统化得单元测试,单元测试系统重构时能发挥巨大的作用,可以重构后快速测试新的接口是否与重构前有出入。...JUnit Vintage:这个模块是兼容JUnit3、JUnit4版本的测试引擎,使得旧版本的自动化测试也可以JUnit5下正常运行。...@BeforeAll:每个单元测试方法执行执行一遍(只执行一次) @DisplayName("商品入库测试"):用于指定单元测试的名称 @Disabled:当前单元测试置为无效,即单元测试时跳过该测试...Jupiter提供了强大的断言方法用以验证结果,使用时需要借助java8的新特性lambda表达式,均是来自org.junit.jupiter.api.Assertions包的static方法。...testNotNull() { assertNotNull(new Object()); } assertThrows用来判断执行抛出的异常是否符合预期,并可以使用异常类型接收返回值进行其他操作

    3.8K31

    如何使用junit5构建单元测试

    前言创建maven项目的时候,src目录下会有main和test两个目录,然后pom文件中会有junit的依赖。...junit5是junit框架的最新版本,其核心包是 org.junit.jupiter。junit5的设计旨在解决 junit4的一些局限,并提供了更多的灵活性和功能。...这里就使用用junit5来进行单元测试,在此之前我们先讲断言。断言(Assertions)断言是测试代码的核心部分,用于验证被测代码的行为是否符合预期。...assertThrows:断言抛出指定异常。assertTimeout:断言规定时间内执行完成。fail:强制使测试失败。assertArrayEquals:用于比较两个数组是否相等。...@Test@Test用来标记测试方法,junit5会自动识别和执行这些方法。

    11410

    Junit5系列-Junit5中Assertions断言类

    ,所以工作过程中完全可以使用Assertions代替Assert类。...* 比如下面案例就是测试了抛出异常的信息是否相同 * 参数: * 1:异常类声明 * 2:测试代码Lambda表达式 */ @Test...ofMillis(10), () -> { Thread.sleep(100); }); } } 这里只是介绍一下其用法,其中还有好多方法没涉及到,者要等我们使用的过程中再去查找合适的方法...message) + "expected: but was: ", (Object)null, actual); } 这个方法主要就是组装了错误消息,并将被验证参数传递到下一层...,但有时候还是不够的,当Junit5不支持你的单元测试需求时,Junit5官方还是鼓励程序员去使用第三方支持库的,比如:AssertJ、Hamcrest,Truth等。。。。

    3.6K21

    JUnit5学习之三:Assertions类

    Assertions类的方法,如下图,大部分是与assertEquals方法类似的判断,例如对象是否为空,数组是否相等,判断失败都会抛出AssertionFailedError异常: 判断两个数组是否相等的逻辑与判断两个对象略有不同...: 异常断言 Assertions.assertThrows方法,用来测试Executable实例执行execute方法时是否抛出指定类型的异常; 如果execute方法执行时不抛出异常,或者抛出的异常与期望类型不一致...,都会导致测试失败; 写段代码验证一下,如下,1除以0会抛出ArithmeticException异常,符合assertThrows指定的异常类型,因此测试可以通过: @Test @DisplayName...,接下来要重点关注的就是和超时相关的测试方法; 超时相关的测试 超时测试的主要目标是验证指定代码能否规定时间内执行完,最常用的assertTimeout方法内部实现如下图,可见被测试的代码通过ThrowingSupplier...实例传入,被执行后再检查耗时是否超过规定时间,超过就调用fail方法抛AssertionFailedError异常: assertTimeout的用法如下,期望时间是1秒,实际上Executable

    63030

    单元测试指南

    开发过程中及时得到反馈,提前规避隐患和发现问题。 应用于自动化构建或持续集成流程,对每次代码修改做回归测试。 作为重构的基础,验证重构是否可靠。...测试覆盖:评测测试过程中已经执行的代码的多少。 测试覆盖率:代码的覆盖程度,一种度量方式。...当你需要下面这些功能时这是必须的: 测试void函数 受监控的对象上测试函数 不知一次的测试为同一个函数,测试过程中改变mock对象的行为。...但是调用when()函数时你可以选择是否调用这些上述这些函数。 (6). 验证执行执行顺序 // A....verifyNoMoreInteractions()交互测试套件中只是一个便利的验证,它的作用是当你需要验证是否存在冗余调用时。滥用它将导致测试代码的可维护性降低。

    6.2K20

    开发必备之单元测试

    大多数互联网企业中 开发工程师研发过程中都会频繁地执行测试用例,运行失败的单测能帮助我们快速 排查和定位问题 使问题在被带到线上之前完成修复。...单元测试中不允许使用 System.out 来进行人工验证,而必须使用断言来验证。 ​ 为了保证单元测试稳定可靠且便于维护,需要保证其独立性。用例之间不允许互相调用,也不允许出现执行次序的先后依赖。...执行 testMethod2 时会重复执行验证testMethod1,导致运行效率降低。更严重的是,testMethod1的验证失败会影响 testMethod2 的执行。...为测试类或方法添加标签,以便有选择性地执行 下面是个典型的 JUnit5 测试类结构: // 定义一个测试类并指定用例测试报告中展示名称 @DisplayName("售票器类型测试") public...assertThrows/assertDoesNotThrows 断言是否抛出了一个特定类型的异常 assertTimeout/assertTimeoutPreemptively 断言是否执行超时,区别在于测试程序是否同一个线程内执行

    17810

    spring junit单元测试

    最常见的疑惑就是与外部系统或者其他中间件的关联,单元测试是否要实际的调用其他中间件/外部系统。...这里给的示例仅仅是我们实践过程中有使用到的,并非junit5的完整注解或者使用讲解,具体需要了解大家可以参考官网。...测试方法执行 执行目标测试方法(基本都是一行,直接调用目标方法并且返回结果) 结果断言 根据业务逻辑预期进行断言的编写(这部分基本上没有自动化的方式,因为断言的条件和业务逻辑相关只能手动编写) 这样写下来是基本逻辑的验证...单元测试的执行 单元测试的执行实际上分成2部分: IDE中我们要去验证单元测试是否能够成功执行 CI/CD作为执行的先决条件保障 IDE可以直接指定测试框架,我们选择junit5直接生成单元测试代码,可以直接在测试包或者类上右键执行单元测试...这个方法可以作为我们开发过程中验证待遇测试有效性的手段。但是真正要能在生产开发流程中更好的体现单元测试的价值,还是需要持续集成的支持,我们项目使用的是jenkins。

    1K60
    领券