首页 > 解决方案 > 在Java中将静态方法作为参数传递

问题描述

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

@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);
    }
}

我也有其他字段的验证器,例如用户名等。我正在考虑实现一个可以接受的辅助方法:tested credential as String, List 但是最后一个参数有问题 - 一个验证方法,不知道如何通过那。

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

标签: javatestingjunitmockito

解决方案


恐怕你的测试质量很差。

应该立即解决的问题包括

  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);
}

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


推荐阅读