Jvmt:
こんにちは、私はいくつかの検証メソッドを持つクラスをテストすることだし、重複コードを削減する方法がある場合、私は思ってきました。
@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);
}
}
渡すようにしてくださいどのように、有効な方法ではない - 文字列、リストとしての資格をテストしたが、私は最後のパラメータに問題を持っている:私は受け入れるヘルパーメソッドを実装することを考えた、ユーザ名などなど、他のフィールドのバリデータをも持っていますそれ。
私はいくつかの方法で交換したいコードは、forループです。
アンドリューTobilko:
私はあなたのテストは、低品質のもので怖いです。
固定されなければならない問題はすぐに含ま
UserCredentialsValidator.usernameValidation(username, userList);
この方法は、第2引数を取るべきではありません。そのリストが取得された場所から場所は、APIの消費者から隠蔽する必要があります。List<String> correctEmails = Arrays.asList(...)
およびList<String> correctUsernames = Arrays.asList(...)
削除する必要があります。あなたはより良いテストはしてパラメータ化させるのだ@ParameterizedTest
と@ValueSource
。私はむしろ削除したい
System.out.println
文を。彼らはテストで少し意味をなします。
@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);
}
今減らすためには何もありません。