JUnit 异常测试
Posted qulianqing
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JUnit 异常测试相关的知识,希望对你有一定的参考价值。
JUnit 异常测试
- 上古写法
@Test
void name() {
boolean hasException = false;
String exceptionMessage = null;
try {
check();
} catch (RuntimeException e) {
hasException = true;
exceptionMessage = e.getMessage();
}
assertEquals("runtime", exceptionMessage);
assertTrue(hasException);
}
void check() {
throw new RuntimeException("runtime");
}
- 普通写法(易错的)
check message 和异常类型
@Test
void name() {
assertThrows(RuntimeException.class, () -> check(), "aaa");
}
void check() {
throw new RuntimeException("runtime");
}
这个测试我们发现异常message 不对但是测试也能过。
扒一扒源码
发现消费message 居然测试不是异常的消息,而是异常不是期待的,和没有异常的情况去消费的。
2.1 普通写法
@Test
void name() {
final RuntimeException runtimeException = assertThrows(RuntimeException.class, () -> check());
assertEquals("runtime", runtimeException.getMessage());
}
void check() {
throw new RuntimeException("runtime");
}
3.流式写法
@Test
void name() {
assertThatThrownBy(() -> check())
.isInstanceOf(RuntimeException.class)
.hasMessage("runtime");
}
void check() {
throw new RuntimeException("runtime");
}
个人认为流式写法目前的认知范围内是最优雅的。
以上是关于JUnit 异常测试的主要内容,如果未能解决你的问题,请参考以下文章
使用java.lang.Exception的错误:测试类应该只有一个公共构造函数