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

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

我还有其他字段的 validator ,例如用户名等。我正在考虑实现一个辅助方法,该方法将接受:tested credential as String, List 但我对最后一个参数有问题 - 验证方法,不确定如何通过。

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

最佳答案

恐怕您的测试质量很差。

应该立即修复的问题包括

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

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

关于java - 在Java中将静态方法作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55142168/

相关文章:

java - Selenium 错误: org. openqa.selenium.NoSuchElementException:无法找到元素:{"method":"name","selector":"db_vaults__button"}

Java - 数字格式异常。将长二进制字符串转换为 dec

java - 如何从基本 xml 开始创建一个巨大的 xml (> 2GB)

java - 关于轮类运算符(operator)

unit-testing - 是否可以将用户输入保存在变量中以使用 intellij (pycharm) 进行连续测试

java - 查找后无法使用数据源

Java - 从另一个组件访问 MouseListener 的数据

测试 Web 应用程序 : "Mirror" ad-hoc testing in another window

testing - 多个测试的相同 `where` 子句

java - 如何避免 BeanCreationException : Could not autowire field error