public static <T extends Throwable> T assertThrowsWithRootCause(
        final Class<T> expectedType,
        final Class<? extends Throwable> expectedRootType,
        final Executable executable) {
        val exception = assertThrows(expectedType, executable);
        assertHasRootCause(expectedRootType, exception);
        return exception;
    }
Assert procedure throws an exception with a specific root cause.

@param expectedType     Expected exception type.
@param expectedRootType Expected exception root cause type.
@param executable       Procedure to assert thrown exception.
@param <T>              Type of exception to be expected.
@return Exception thrown in assertion process.
core/cas-server-core-util-api/src/test/java/org/apereo/cas/util/junit/Assertions.java