pasando método estático como parámetro en Java

Jvmt:

Hola Estoy probando la clase que tiene algunos métodos de validación y he estado preguntando si hay una manera de reducir el código duplicado.

@Test
void testCorrectEmailValidator() {
    List<String> correctEmails = Arrays.asList("[email protected]", "[email protected]", "[email protected]",
            "[email protected]", "[email protected]", "[email protected]");

    for (String email : correctEmails) {
        boolean isValid = UserCredentialsValidator.emailValidator(email);
        System.out.println("Email is valid: " + email + ": " + isValid);
        assertTrue(isValid);
    }
}

@Test
void testCorrectUsernameValidator() {
    List<String> correctUsernames = Arrays.asList("username", "123username", "username3", "user2name",
            "USERNAME", "USERNAME123", "123USERNAME123", "2uSERname33");

    for(String username : correctUsernames) {
        boolean isValid = UserCredentialsValidator.usernameValidation(username, userList);
        System.out.println("Username is valid:    " + username + "     : " + isValid);
        assertTrue(isValid);
    }
}

También tengo validadores para otros campos como el nombre de usuario, etc. Estaba pensando en la implementación de un método de ayuda que acepte: a prueba de credenciales como secuencia, lista pero tengo un problema con el último parámetro - un método de validación, no está seguro de cómo pasar ese.

El código me gustaría reemplazarlo con algún método es el bucle.

Andrew Tobilko:

Me temo que sus pruebas son de baja calidad.

Los problemas que deben ser fijos incluyen inmediatamente

  1. UserCredentialsValidator.usernameValidation(username, userList);El método no debe tomar el segundo argumento. El lugar desde donde se recupera esa lista debe ser ocultado por parte del consumidor de la API.

  2. List<String> correctEmails = Arrays.asList(...)y List<String> correctUsernames = Arrays.asList(...)debe ser eliminado. Es mejor que haga las pruebas parametrizados con @ParameterizedTesty @ValueSource.

  3. Prefiero quito las System.out.printlndeclaraciones. Ellos tienen poco sentido en las pruebas.


@ParameterizedTest
@ValueSource(strings = {"[email protected]", "[email protected]"})
void testUserEmailValidationWithValidUserEmailShouldPass(String validUserEmail) {
    boolean isValid = UserCredentialsValidator.emailValidator(validUserEmail);
    assertTrue(isValid);
}

@ParameterizedTest
@ValueSource(strings = {"username", "123username"})
void testUserNameValidationWithValidUserNameShouldPass(String validUserName) {
    boolean isValid = UserCredentialsValidator.usernameValidation(validUserName);
    assertTrue(isValid);
}

Ahora no hay nada para reducir.

Supongo que te gusta

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