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

JUnit测试抛异常函数遇问题:自定义UnknownVehicleException咨询

JUnit测试自定义异常的踩坑解决指南

嘿,看你描述的情况,应该是在JUnit里验证UnknownVehicleException抛出的时候遇到问题了吧?我来给你捋几个常见的坑和解决办法,都是实际踩过的经验:

1. 选对JUnit捕获异常的方式

不同版本的JUnit写法不一样,别搞混了:

  • JUnit 4:直接在@Test注解里指定要捕获的异常类型就行,简单直接:
@Test(expected = UnknownVehicleException.class)
public void testRentUnknownVehicle() throws UnknownVehicleException {
    RentalAgency agency = new RentalAgency();
    // 这里调用会触发异常的方法,比如租一辆不存在的车
    agency.rentVehicle("invalid-id", new Customer());
}
  • JUnit 5(Jupiter):更推荐用assertThrows,不仅能捕获异常,还能对异常做额外验证,灵活性更高:
@Test
void testRentUnknownVehicle() {
    RentalAgency agency = new RentalAgency();
    // 捕获异常并赋值给变量
    UnknownVehicleException caughtException = assertThrows(UnknownVehicleException.class, () -> {
        agency.rentVehicle("invalid-id", new Customer());
    });
    // 要是你后面改了异常的消息,还能这么验证
    // assertEquals("Vehicule not found in agency", caughtException.getMessage());
}

2. 先修复你的自定义异常写法

你现在的UnknownVehicleException构造函数用了System.out.println,这其实是个小误区!异常的正确打开方式是通过super()传递错误消息,而不是直接打印到控制台。改成这样更规范,也方便后续测试验证:

package rental;
public class UnknownVehicleException extends Exception{
    public UnknownVehicleException(){
        super("Vehicule not found in agency");
    }
}

这样异常的信息会被框架正确管理,不会在测试时乱输出无关内容,还能让你在测试里断言消息是否正确。

3. 确认你的业务方法真的抛出了异常

这是最容易忽略的点!你得检查RentalAgency里的目标方法(比如rentVehicle),是不是在条件满足时明确抛出了异常,而不是只打印了一句话就完事了。比如:

// 错误示例:只打印不抛异常,JUnit肯定捕获不到
public void rentVehicle(String vehicleId, Customer customer) {
    Vehicle target = findVehicle(vehicleId);
    if (target == null) {
        System.out.println("Vehicule not found in agency");
        // 这里少了throw语句!
    }
}

// 正确示例:抛出异常,JUnit才能捕获到
public void rentVehicle(String vehicleId, Customer customer) throws UnknownVehicleException {
    Vehicle target = findVehicle(vehicleId);
    if (target == null) {
        throw new UnknownVehicleException();
    }
    // 后续的租赁逻辑
}

按照这几点排查下来,应该就能解决你的问题啦!

内容的提问来源于stack exchange,提问作者Rémy.W

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:57:58