¿Qué ocurre con el ejecutable en un JUnit assertThrows?

TMOTTM:

Entiendo que Junit5 Assertions.assertThrowsacepta un objeto de tipo ejecutable. Así que para un simple ejemplo en el que un constructor no podrá tomar una cadena vacía como un parámetro de nombre:

public Company(String aName, Calendar aFoundingDate)
{
    if (aName == null || aName.length() == 0 || aName.length() > 50) {
        throw new IllegalArgumentException("Invalid name");
    }
    this.name = aName;
    foundingDate = aFoundingDate;
}

Puedo escribir una prueba como esta:

// Company constructor test
@Test
void testCompanyConstructor() {
    // Given
    String emptyName = "aabbe";
    Calendar validFoundingDate = Calendar.getInstance();
    validFoundingDate.set(2000, 1, 1);

    // Then
    assertThrows(IllegalArgumentException.class, () -> new Company(emptyName, validFoundingDate));
}

Lo que me pregunto es, ¿qué ocurre con el ejecutable, es decir, la expresión lambda? ¿El JUnit llamar ejecutar () en la expresión Lambda y, al hacerlo, se crea el objeto anónimo empresa con el nombre vacío y la excepción es

Apéndice: Estas versiones son equivalentes:

// Company constructor test
@Test
void testCompanyConstructor() {
    // Given
    String emptyName = "";
    Calendar validFoundingDate = Calendar.getInstance();
    validFoundingDate.set(2000, 1, 1);

    // Then
    Executable executable = new Executable() {
        public void execute() {
            new Company(emptyName, validFoundingDate);
        }
    };
    assertThrows(IllegalArgumentException.class, executable);
    assertThrows(IllegalArgumentException.class, () -> new Company(emptyName, validFoundingDate));
}
Michalk:

Al inspeccionar el código de assertThrowspodemos ver que no hay tales profundamente código colocado en AssertThrows::assertThrows:

try {
    executable.execute();
}
catch (Throwable actualException)
    if (expectedType.isInstance(actualException)) {
        return (T) actualException;
    }
    else {
        BlacklistedExceptions.rethrowIfBlacklisted(actualException);
        String message = buildPrefix(nullSafeGet(messageOrSupplier))
                + format(expectedType, actualException.getClass(), "Unexpected exception type thrown");
        throw new AssertionFailedError(message, actualException);
    }
}

por lo que, básicamente, invoca Executabley las capturas Throwableque podrían ser lanzados y lo devuelve. Si no es una excepción fue arrojado o el tipo de excepción es diferente de lo esperado - la afirmación falla.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=315176&siteId=1
Recomendado
Clasificación