【问题标题】:how to change csvparsersettings of junit parameterized tests using @csvsource如何使用 @csvsource 更改 junit 参数化测试的 csvparsersettings
【发布时间】:2018-07-31 14:18:50
【问题描述】:

给定一个简单的测试方法,注释为@ParameterizedTest,通过注释@CsvSource(例如@CsvSource({ "@", "*", "#", "?", "-", "$", "!", "0" })使用输入。运行所述测试时,一旦应该测试"#",测试就会中断。在阅读堆栈跟踪/异常时,我发现以下内容:

org.junit.jupiter.params.shadow.com.univocity.parsers.common.TextParsingException: java.lang.IllegalArgumentException - Unable to skip 1 lines from line 2. End of input reached
  Parser Configuration: CsvParserSettings:
    ...
    CsvFormat:
      Comment character=# 
      Field delimiter=,
      Line separator (normalized)=\n
      Line separator sequence=\r\n
      Quote character='
      Quote escape character='
      Quote escape escape character=null

我猜问题出在最后一个块 (Comment character=#):具体参数被读取为注释。如何更改此设置?

【问题讨论】:

    标签: java junit5 parameterized-tests


    【解决方案1】:

    您不能更改评论字符。

    可以# 用单引号括起来,如下所示:

    @CsvSource({ "@", "*", "'#'", "?", "-", "$", "!", "0" })

    但你实际上不应该将@CsvSource 用于单个字符串。

    相反,只需使用以下内容:

    @ValueSource(strings = { "@", "*", "#", "?", "-", "$", "!", "0" })

    【讨论】:

    • 谢谢!尝试了许多转义# 的方法,惊讶于它是单引号。这也适用于以# 开头并以多个后续字符结尾的输入,例如#abc(这也会导致测试用例的中断,对于任何感兴趣的人)。你知道为什么这是偶然的吗?
    • 如果将# 括在单引号中,则第一个字符是',而不是#。因此,文本不再被解释为注释。
    猜你喜欢
    • 2019-01-04
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多