代码之家  ›  专栏  ›  技术社区  ›  zeugor

以Sting阵列为源对Junit 5进行参数化

  •  0
  • zeugor  · 技术社区  · 1 周前

    我有一个验证密码的方法。我有一个JUnit。在那里,我有一个数组,其中包含所有可能的无效密码。我需要使用参数化JUnit方法 @MethodSource 我想这应该是一种直接使用 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);
    }
    

    知道吗?

    1 回复  |  直到 1 周前
        1
  •  1
  •   ekalin    1 周前

    您可以使用

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