java - 在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 循环。
解决方案
恐怕你的测试质量很差。
应该立即解决的问题包括
UserCredentialsValidator.usernameValidation(username, userList);
该方法不应采用第二个参数。检索该列表的位置应该对 API 使用者隐藏。List<String> correctEmails = Arrays.asList(...)
并且List<String> correctUsernames = Arrays.asList(...)
应该被删除。你最好用@ParameterizedTest
和参数化测试@ValueSource
。我宁愿删除这些
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);
}
现在没有什么可以减少的了。
推荐阅读
- matlab - 查找Matlab中矩阵的行是否“落在”另一个矩阵的行中
- java - 如何通过改造提取独特的数据
- json - 火花非json到json和数据框错误
- javascript - 避免直接的 prop 突变会增加变量的重新声明
- sql - 带有 SQL 表达式/子查询的 Crystal Reports 中的“无法绑定多部分标识符”
- javascript - 在php jquery中获取json对象内的键
- json - TypeScript 包中缺少资源文件
- c# - 如何连续多次更改datagridview中的相同组合框?
- python - 尝试从网页打印所有 TR 元素和所有 TD 元素
- android - 使用 SimpleCursorAdapter 复制项目