You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JUnit中assertThrows写法要点及lambda表达式()的含义咨询

问题解答

一、该assertThrows写法需要掌握的基础知识点

  • JUnit 5 异常断言规则:assertThrows是JUnit 5内置的异常校验API,作用是验证指定代码块执行时必须抛出预期类型的异常,方法返回值为抛出的异常实例,可后续对异常信息、栈轨迹等做二次校验。该方法第一个入参要求传入预期异常的Class对象,第二个入参为待执行的测试代码块。
  • Java Class对象概念:StudentException.class是Java中获取对应类型Class对象的固定写法,assertThrows通过该参数匹配实际抛出的异常类型是否符合预期。
  • Java Lambda表达式基础:assertThrows第二个入参的类型为Executable函数式接口,支持用Lambda表达式简化匿名内部类的冗余写法。
  • 函数式接口定义:只有一个抽象方法的接口属于函数式接口,仅这类接口可以用Lambda表达式直接实例化,JUnit的Executable接口仅包含一个无参抽象方法execute(),符合Lambda适配要求。
  • Lambda变量捕获规则:Lambda内部引用的外部局部变量(比如示例中的name、student实例)必须为final或等效final(赋值后无二次修改),否则会触发编译报错。

二、Lambda表达式中()的含义

示例中() -> student.findName(name)的(),对应其适配的函数式接口抽象方法的参数列表。
因为Executable的execute()方法本身没有入参,所以Lambda的参数列表位置写空括号(),表示该Lambda实例对应的方法不需要传入任何参数。无参场景下()不可省略,仅当参数列表只有一个参数时,才可以省略括号,比如(str) -> System.out.println(str)可简写为str -> System.out.println(str)。

对应匿名内部类写法可直观对比参数逻辑:

new Executable() {
    @Override
    public void execute() throws Throwable {
        // 此处无入参,对应Lambda的空括号()
        student.findName(name);
    }
}

内容的提问来源于stack exchange,提问作者Jen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 22:24:00