Junit测试异常

本文详细介绍了在JUnit测试中检查异常的三种常见方法:1) 使用@Test(expected=…)注解,2) 利用ExpectedException规则,3) try/catch结合assert/fail。每种方法都有其优缺点,例如@Test(expected=…)简单但可能不精确,ExpectedException可以设置异常属性并精确定位异常位置,而try/catch/fail则是一种传统但有效的手段,需要注意避免忘记调用fail()。选择合适的方法取决于具体测试需求的精度和复杂性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

检查抛出的异常有三种方式,它们各自都有优缺点:

1.@Test(expected…)

@Test注解有一个可选的参数,"expected"允许你设置一个Throwable的子类。在测试的方法前加入类似下面的句子即可验证方法抛出预期的异常:

@Test(expected = IllegalArgumentException.class)

简单明了,这个测试有一点误差,因为异常会在方法的某个位置被抛出,但不一定在特定的某行。

2.ExpectedException

如果要使用JUnit框架中的ExpectedException类,需要声明ExpectedException异常。

@Rule

public ExpectedException thrown= ExpectedException.none();

然后你可以使用更加简单的方式验证预期的异常。

        thrown.expect(异常名);

或者可以设置预期异常的属性信息。

thrown.expect(异常名);

thrown.expectMessage("属性信息");

除了可以设置异常的属性信息之外,这种方法还有一个优点,它可以更加精确的找到异常抛出的位置。

3.Try/catch with assert/fail

在JUnit4之前的版本中,使用try/catch语句块检查异常

 

@Test

public void canVote_throws_IllegalArgumentException_for_zero_age() {

Student student = new Student();

try {

student.canVote(0);

} catch (IllegalArgumentException ex) {

assertThat(ex.getMessage(), containsString("age should be +ve"));

}

fail("expected IllegalArgumentException for non +ve age");

}

尽管这种方式很老了,不过还是非常有效的。主要的缺点就是很容易忘记在catch语句块之后需要写fail()方法,如果预期异常没有抛出就会导致信息的误报。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值