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.
Me temo que sus pruebas son de baja calidad.
Los problemas que deben ser fijos incluyen inmediatamente
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.List<String> correctEmails = Arrays.asList(...)
yList<String> correctUsernames = Arrays.asList(...)
debe ser eliminado. Es mejor que haga las pruebas parametrizados con@ParameterizedTest
y@ValueSource
.Prefiero quito las
System.out.println
declaraciones. 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.