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!");
}

我想匹配方法并抛出 ConstraintViolationExceptionFunctionalException 一共

有什么想法吗?

谢谢

抛出一个异常,类型为FunctionalException。这个FunctionalExceptioncause是一个ConstraintViolationException.

假设 assertThrowsJUnit 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 因为它有很多流畅的方法。