junit's @csvsource.quotecharacter
#java #todayilearned #junit

@CsvSource文本块一起使用真的很棒!与validation files类似,它可用于创建易于阅读的测试,并并排放置。

例如:

    @ParameterizedTest
    @CsvSource(delimiterString = "->", textBlock = """
        ABC -> abc
        Abc -> abc
        """)
    void toLowercase(String input, String expected) {
        assertThat(input.toLowerCase())
            .isEqualTo(expected);
    }

最近让我感到困惑的是以下错误:

org.junit.jupiter.api.extension.ParameterResolutionException:
No ParameterResolver registered for parameter [java.lang.String arg1] in method [void MyTest.test(java.lang.String,java.lang.String)].

出来的是,它是由一个以单Quote '开头的参数值引起的,该值在值结束时并未由另一个'关闭。在我的情况下,罪魁祸首是'S-GRAVENHAGE,是比利时街头的名字。

解决方案是将参数quoteCharacter设置为double quote ",前提是我们使用 text块。这样,我们可以使用""测试空字符串。

示例:

    @ParameterizedTest
    @CsvSource(quoteCharacter = '\"', delimiterString = "->", textBlock = """
        'S-GRAVENHAGE -> 's-gravenhage
        "" -> ""
        """)
    void toLowercase(String input, String expected) {
        assertThat(input.toLowerCase())
            .isEqualTo(expected);
    }

我希望它有帮助,欢呼!