在某些情况下,我们断定目标方法会抛出异常,这时该如何处理呢。
使用junit测试抛出的异常,我总结了3种方式,详见代码:
import static org.junit.Assert.fail;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
/**
* 测试异常
*
* @author wei.ss
*
*/
public class ExceptionTest {
// 规则注解,加在public属性上,且属性直接或间接实现了org.junit.rules.TestRule
@Rule
public ExpectedException expectedException = ExpectedException.none();
// 普通的做法
@Test
public void test1() {
try {
// 模拟抛出异常
if ("aaa".equals("aaa")) {
// 如果没有抛出异常,测试将不会通过
throw new RuntimeException();
}
// 正常情况下,代码不应该执行到这里
fail("正常情况下,代码不应该执行到这里");
} catch (Exception e) {
}
}
// 使用注解@Test的属性expected指定期望抛出的异常
@Test(expected = RuntimeException.class)
public void test2() {
// 如果没有抛出异常,测试将不会通过
throw new RuntimeException();
}
@Test
public void test3() {
// 期望后面抛出RuntimeException异常
expectedException.expect(RuntimeException.class);
// 如果没有抛出异常,测试将不会通过
throw new RuntimeException();
}
}
原文:http://my.oschina.net/u/2007041/blog/507789