JUnit5 CsvFileSource - 转义逗号(双引号后)

问题描述 投票:0回答:3

我还没有找到一种方法来转义 CSV 资源文件中由 ,

 
CsvFileSource 注释使用的
junit5
 字符。因此,任何包含逗号的字符串都会被切成两半,并且第二部分永远不会被使用。

有什么解决方法吗?


编辑:原来的问题不完整。问题是我的资源中有逗号和双引号。参数化测试处理引号,但不处理两者。

CSV 行示例:

5,10,5,53,"</identity/partners?limit=5&cursor=5>; rel="prev", </identity/partners?limit=5&cursor=15>; rel="next""

引号被正确转义,但直到出现一个通配逗号(这是我可能猜测的算法)。

因此生成的断言如下所示:

"Link" was not "\"</identity/partners?limit=5&cursor=5>; rel=\"prev\"", was "</identity/partners?limit=5&cursor=5>; rel="prev", </identity/partners?limit=5&cursor=15>; rel="next""
csv junit5 parametrized-testing
3个回答
6
投票

如果有人进入此页面寻找答案,这是我在测试中使用的一个示例,以实现能够在我的测试中使用这些字符串值的目标(注意:它不会转义逗号,但实现了运行的目标输入中包含逗号的测试。您可以使用任何您想要的分隔符)。

@ParameterizedTest(name = "Product details for product number - {0}")
@CsvSource(value = {"0; Sauce Labs Backpack;carry.allTheThings() with the sleek, streamlined Sly Pack that melds uncompromising style with unequaled laptop and tablet protection."
        ,"1; Sauce Labs Bike Light;A red light isn't the desired state in testing but it sure helps when riding your bike at night. Water-resistant with 3 lighting modes, 1 AAA battery included."
}, delimiter = ';')
void assertThatProductDescriptionIsCorrectForAStandardUser(Integer productNumber, String productSummary, String productDescription) {
    String url = String.format("%s/%s", swagItemDetails, productNumber);
    deepLink.deepLinkToScreen(url , packageName);

    assertAll("Product Details"
            , () -> assertEquals(productSummary, productScreen.getProductSummary())
            , () -> assertEquals(productDescription, productScreen.getProductDescriptionByText(productDescription))
    );
}

4
投票

将您的值用双引号括起来:

"first, value", second, third and last one

更多详细信息请参见:http://junit.org/junit5/docs/current/user-guide/#writing-tests-parameterized-tests-sources-CsvFileSource

在您的情况下,您可以在注释中指定完全不同的 delimiter 字符: https://junit.org/junit5/docs/current/api/org.junit.jupiter.params/org/junit/jupiter/ params/provider/CsvFileSource.html#delimiter()

但是它不再是“逗号”分隔的值......


0
投票

您应该使用引号字符用逗号引用值。默认情况下引号字符是单引号

'
,如下所示:

@CsvSource({
  "apple,1",
  "'lemon, lime',0xF1"})

如示例所示,“柠檬、酸橙”将被视为单一值。 要更改引号字符,请使用

quoteCharacter
参数:

@CsvSource({
  "apple,1",
  "\"lemon, lime\",0xF1"}, quoteCharacter = '\"')

文档:https://junit.org/junit5/docs/current/user-guide/#writing-tests-parameterized-tests-sources-CsvSource

© www.soinside.com 2019 - 2024. All rights reserved.