assertThrows 多个异常
assertThrows multiple exceptions
谁能告诉我如何使用 assertThrows 有几个例外?
例如,这里是 class:
protected void checkViolation(Set<ConstraintViolation<EcritureComptable>> vViolations) throws FunctionalException {
if (!vViolations.isEmpty()) {
throw new FunctionalException("L'écriture comptable ne respecte pas les règles de gestion.",
new ConstraintViolationException(
"L'écriture comptable ne respecte pas les contraintes de validation",
vViolations));
}
}
和我的测试方法:
@Test
void checkViolation(){
comptabiliteManager = spy(ComptabiliteManagerImpl.class);
when(vViolations.isEmpty()).thenReturn(false);
assertThrows( ConstraintViolationException.class, () ->comptabiliteManager.checkViolation(vViolations), "a string should be provided!");
}
我想匹配方法并抛出 ConstraintViolationException 和 FunctionalException 一共
有什么想法吗?
谢谢
抛出一个异常,类型为FunctionalException
。这个FunctionalException
的cause
是一个ConstraintViolationException
.
假设 assertThrows
是 JUnit 5 method,它 returns 抛出的异常。因此,您可以简单地了解其原因并对此原因添加额外的检查。
我假设 ConstraintViolationException 将是 FunctionalException 的根本原因。在这种情况下,要检查抛出的异常是否具有所需的原因,您可以执行类似
的操作
Executable executable = () -> comptabiliteManager.checkViolation(vViolations);
Exception exception = assertThrows(FunctionalException.class, executable);
assertTrue(exception.getCause() instanceof ConstraintViolationException);
另一个可能更干净的解决方案是使用 AssertJ 及其 API.
Throwable throwable = catchThrowable(() -> comptabiliteManager.checkViolation(vViolations));
assertThat(throwable).isInstanceOf(FunctionalException.class)
.hasCauseInstanceOf(ConstraintViolationException.class);
您必须从 AssertJ class 导入方法:
import static org.assertj.core.api.Assertions.catchThrowable;
import static org.assertj.core.api.Assertions.assertThat;
我鼓励你看看这个 API 因为它有很多流畅的方法。
谁能告诉我如何使用 assertThrows 有几个例外?
例如,这里是 class:
protected void checkViolation(Set<ConstraintViolation<EcritureComptable>> vViolations) throws FunctionalException {
if (!vViolations.isEmpty()) {
throw new FunctionalException("L'écriture comptable ne respecte pas les règles de gestion.",
new ConstraintViolationException(
"L'écriture comptable ne respecte pas les contraintes de validation",
vViolations));
}
}
和我的测试方法:
@Test
void checkViolation(){
comptabiliteManager = spy(ComptabiliteManagerImpl.class);
when(vViolations.isEmpty()).thenReturn(false);
assertThrows( ConstraintViolationException.class, () ->comptabiliteManager.checkViolation(vViolations), "a string should be provided!");
}
我想匹配方法并抛出 ConstraintViolationException 和 FunctionalException 一共
有什么想法吗?
谢谢
抛出一个异常,类型为FunctionalException
。这个FunctionalException
的cause
是一个ConstraintViolationException
.
假设 assertThrows
是 JUnit 5 method,它 returns 抛出的异常。因此,您可以简单地了解其原因并对此原因添加额外的检查。
我假设 ConstraintViolationException 将是 FunctionalException 的根本原因。在这种情况下,要检查抛出的异常是否具有所需的原因,您可以执行类似
的操作Executable executable = () -> comptabiliteManager.checkViolation(vViolations);
Exception exception = assertThrows(FunctionalException.class, executable);
assertTrue(exception.getCause() instanceof ConstraintViolationException);
另一个可能更干净的解决方案是使用 AssertJ 及其 API.
Throwable throwable = catchThrowable(() -> comptabiliteManager.checkViolation(vViolations));
assertThat(throwable).isInstanceOf(FunctionalException.class)
.hasCauseInstanceOf(ConstraintViolationException.class);
您必须从 AssertJ class 导入方法:
import static org.assertj.core.api.Assertions.catchThrowable;
import static org.assertj.core.api.Assertions.assertThat;
我鼓励你看看这个 API 因为它有很多流畅的方法。