在 JunitParams 中使用“逗号”或“管道”

Posted

技术标签:

【中文标题】在 JunitParams 中使用“逗号”或“管道”【英文标题】:Using "Comma" or "pipe" within JunitParams 【发布时间】:2015-09-25 14:44:12 【问题描述】:

我正在尝试使用 JunitParams 来参数化我的测试。但我的主要问题是参数是带有特殊字符的字符串,波浪号或管道。

import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.junit.runner.RunWith;

import junitparams.JUnitParamsRunner;
import junitparams.Parameters;

@RunWith(JUnitParamsRunner.class)
public class TheClassTest 

    @Rule
    public ExpectedException exception = ExpectedException.none();

     @Test
     @Parameters("AA~BBB")
     public void shouldTestThemethod(String value) throws Exception 
        exception.expect(TheException.class);

        TheClass.theMethod(value);     
        // Throw an exception if value like "A|B" or "A~B",
        // ie if value contain a ~ or a |
    

使用波浪号,我没有问题。 但是对于管道,我有一个例外:

java.lang.IllegalArgumentException: wrong number of arguments

管道,作为逗号,用作参数的分隔符。

我有什么方法可以设置不同的分隔符吗? 还是这是 JunitParams 的限制?

【问题讨论】:

你可以使用this syntax来解决问题 我也会尝试用“\\”转义管道,请参阅this sample 我试过这个语法,还是不行。现在我使用参数化而不是 JunitParams。它正在工作,但论点适用于所有 JunitClass (所以我必须创建一个新类)。作品。但是因为我的参数很难阅读(充满 | 和 ~ 和其他特殊字符),我不想在我的输入集中添加很多转义字符。但是,是的,它正在工作。 【参考方案1】:

你确实可以用双反斜杠转义管道:

@Parameters("AA\\|BBB")
public void test(String value)

【讨论】:

你也可以用这个转义逗号。【参考方案2】:

我没有找到配置分隔符的选项,但如果您在 Object[][] 中提供数据,则无需转义这些字符。

考虑以下示例:

public static Object[][] provideParameters() 
   return new Object[][] 
        new Object[] "A,B|C"
    ;

,| 都可以直接使用,大大提高了测试的可读性。

使用@Parameters(method = "provideParameters") 注释您的测试以使用此测试工厂。您甚至可以将工厂移动到另一个类(例如,@Parameters(source = Other.class, method = "provideParameters"))。

【讨论】:

【参考方案3】:

您可以查看zohhak。它类似于 junit 参数,但在解析参数方面为您提供了更大的灵活性。看起来它可能有助于处理“难以阅读”的参数。文档中的示例:

@TestWith(value="7 | 19, 23", separator="[\\|,]")
public void mixedSeparators(int i, int j, int k) 
    assertThat(i).isEqualTo(7);
    assertThat(j).isEqualTo(19);
    assertThat(k).isEqualTo(23);


@TestWith(value=" 7 = 7 > 5 => true", separator="=>")
public void multiCharSeparator(String string, boolean bool) 
    assertThat(string).isEqualTo("7 = 7 > 5");
    assertThat(bool).isTrue();

【讨论】:

以上是关于在 JunitParams 中使用“逗号”或“管道”的主要内容,如果未能解决你的问题,请参考以下文章

xml 使用JUnit,JUnitParams和Mockito进行单元测试的基本maven设置。

Angular 2 中的小数管道 - 仅逗号,无小数位

通过 http 管道将逗号分隔的值转换为 list<string>

Java - 将管道和逗号分隔的文件转换为 xml

如何在r中添加或减去逗号分隔的数字?

AWS Data Pipeline 在 emr 活动步骤部分中转义逗号