在junit单元测试中,我们可以使用 org.junit.Assert.assertThrows 包下的 assertThrows() 方法 这个方法返回了一个泛型的异常
public static <T extends Throwable> assertThrows(Class<T> expectedType, Executable executable)
假设我们有以下测试类
package cn.lanqiao;
public class MyError {
public int t(int num) {
if(num < 18) {
throw new NullPointerException("年龄小于18");
}else {
return 0;
}
}
}
咱们可以使用assertThrows() 去断言它所抛出的异常
第一个参数可以传入异常的类型, 第二个参数位置传入一个函数, 可以用 Lambda 表达式
package cn.lanqiao;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThrows;
import org.junit.Before;
import org.junit.Test;
public class MyErrorTest {
private MyError myError;
@Before
public void init() {
myError = new MyError();
}
@Test
public void test1() {
assertThrows(NullPointerException.class, () -> myError.t(17));
}
}
我们也可以通过接收它的返回值,然后拿到抛出异常的信息,在断言提示信息
@Test
public void test2() {
NullPointerException exception = assertThrows(NullPointerException.class, () -> myError.t(17));
// 此处 exception.getMessage() 将会得到 年龄小于18 这段字符串
assertEquals("年龄小于18", exception.getMessage());
}
除了这种方法,我们还可以在@Test的注解中,中预期异常,如这样
@Test(expected = NullPointerException .class)
public void test3() {
myError.t(17);
}