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

时间:2015-09-25 14:44:13

标签: java junit pipe comma junitparams

我正在尝试使用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的限制吗?

3 个答案:

答案 0 :(得分:3)

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

考虑以下示例:

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

可以直接使用,|,这可以显着提高测试的可读性。

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

你确实可以使用双反斜杠来逃避管道:

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