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

如何编写Junit测试验证Java方法是否正确抛出预期异常

结论

你现有的写法不是正确的Junit异常验证方式,存在两处核心问题:

  • 测试方法调用validateName传入null时,方法会直接抛出未捕获的IllegalArgumentException,测试会直接标记失败,assertEquals逻辑根本不会执行
  • 代码中的NameValidator validator仅声明未实例化,调用方法时会先触发空指针异常,连目标业务逻辑都无法执行
正确实现方式

根据你使用的Junit版本选择对应写法即可:

Junit 5(Jupiter,当前主流版本)

使用assertThrows方法,可以同时验证异常类型和异常信息:

@Test
public void handlesNullTest() {
    String name = null;
    NameValidator validator = new NameValidator();
    // 捕获方法抛出的异常
    IllegalArgumentException exception = org.junit.jupiter.api.Assertions.assertThrows(
        IllegalArgumentException.class,
        () -> validator.validateName(name)
    );
    // 验证异常信息是否符合预期
    assertEquals("Name cannot be null", exception.getMessage());
}

Junit 4

如果仅需要验证抛出的异常类型,可以直接给@Test注解加expected属性:

@Test(expected = IllegalArgumentException.class)
public void handlesNullTest() {
    String name = null;
    NameValidator validator = new NameValidator();
    validator.validateName(name);
}

如果需要同时验证异常信息,使用ExpectedException规则:

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

@Test
public void handlesNullTest() {
    String name = null;
    NameValidator validator = new NameValidator();
    thrown.expect(IllegalArgumentException.class);
    thrown.expectMessage("Name cannot be null");
    validator.validateName(name);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:45:03