Gas*_*rdP 7 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 |
}
}
Run Code Online (Sandbox Code Playgroud)
随着代字号,我没有问题.但是有了管道,我有一个例外:
java.lang.IllegalArgumentException: wrong number of arguments
Run Code Online (Sandbox Code Playgroud)
管道(以逗号形式)用作参数的分隔符.
我有什么方法可以设置不同的分隔符吗?或者这是JunitParams的限制?
我没有找到配置分隔符字符的选项,但如果您在Object[][].
考虑以下示例:
public static Object[][] provideParameters() {
return new Object[][] {
new Object[] {"A,B|C"}
};
}
Run Code Online (Sandbox Code Playgroud)
和,都|可以直接使用,这显着提高了测试的可读性。
@Parameters(method = "provideParameters")使用此测试工厂来注释您的测试。您甚至可以将工厂移动到另一个类(例如,@Parameters(source = Other.class, method = "provideParameters"))。
你确实可以用双反斜杠来逃避管道:
@Parameters("AA\\|BBB")
public void test(String value)
Run Code Online (Sandbox Code Playgroud)
你可以检查一下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();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1461 次 |
| 最近记录: |