我有一种验证密码的方法。我有一个 JUnit 用于此目的。我有一个数组,其中包含所有可能的无效密码。我需要使用
@MethodSource
参数化 JUnit 方法。我想这应该是一种直接使用 String[]
、INVALID_PASSWORDS
进行参数化的方式,然后我就可以摆脱该方法 invalidPasswords()
:
private static final String[] INVALID_PASSWORDS = { NON_DIGIT_PASSWORD, NON_SPECIAL_CHARACTER_PASSWORD,
NON_LOWER_CASE_PASSWORD, NON_UPPER_CASE_PASSWORD, SHORTER_THAN_8_PASSWORD, WITH_WHITESPACES_PASSWORD };
@ParameterizedTest
@MethodSource("invalidPasswords")
void When_invalidPassword_Expect_exceptionThrown(String value) {
Assertions.assertThrows(InvalidRequest.class, () -> Password.of(value.toString()));
}
private static Stream<String> invalidPasswords() {
return Arrays.stream(INVALID_PASSWORDS);
}
有什么想法吗?
你可以使用
@ParameterizedTest
@ValueSource(strings = { NON_DIGIT_PASSWORD, ... })
void When_invalidPassword_Expect_exceptionThrown(String value) {
Assertions.assertThrows(InvalidRequest.class, () -> Password.of(value.toString()));
}
如果你确实想要一个字段,你可以使用
@FieldSource
:
static final String[] INVALID_PASSWORDS = { NON_DIGIT_PASSWORD, ... };
@ParameterizedTest
@FieldSource("INVALID_PASSWORDS")
void When_invalidPassword_Expect_exceptionThrown(String value) {
Assertions.assertThrows(InvalidRequest.class, () -> Password.of(value.toString()));
}