在Java中将静态方法作为参数传递

jav*_*mat 6 java testing junit mockito

您好,我正在测试具有某些验证方法的类,我一直在想是否可以减少重复的代码。

@Test
void testCorrectEmailValidator() {
    List<String> correctEmails = Arrays.asList("test@test.com", "test123@test123.com", "test@test.com.in",
            "test.test2@test.com", "test.test2.test3@test.com", "TEST.2test@test.com");

    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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我也有用于其他字段(例如用户名等)的验证器。我正在考虑实现一个可以接受的辅助方法:将凭据测试为字符串,列表,但最后一个参数存在问题-验证方法,不确定如何传递那。

我想用某种方法替换的代码是for循环。

And*_*lko 4

恐怕你的测试质量很低。

应立即解决的问题包括

  1. UserCredentialsValidator.usernameValidation(username, userList);该方法不应采用第二个参数。检索该列表的位置应该对 API 使用者隐藏。

  2. List<String> correctEmails = Arrays.asList(...)并且List<String> correctUsernames = Arrays.asList(...)应该被删除。@ParameterizedTest您最好使用和来参数化测试@ValueSource

  3. 我宁愿删除这些System.out.println陈述。它们在测试中没有什么意义。


@ParameterizedTest
@ValueSource(strings = {"test@test.com", "test123@test123.com"})
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);
}
Run Code Online (Sandbox Code Playgroud)

现在已经没有什么可以减少的了。