在JUnit4中使用参数化测试时,是否有一种方法可以设置我自己的自定义测试用例名称?

我想改变默认的-[测试类]. runtest [n] -有意义的东西。


当前回答

您可能还想尝试JUnitParams: https://github.com/Pragmatists/JUnitParams

其他回答

当您想要测试名称中的参数值时,您可以执行类似于-的操作

@ParameterizedTest(name="{index} {arguments} then return false" )
@ValueSource(strings = {"false","FALSE","   ","123","abc"})
@DisplayName("When Feature JVM argument is ")
void test_Feature_JVM_Argument_Is_Empty_Or_Blank_Strings_Or_False(String params) {
    System.setProperty("FeatureName", params);
    assertFalse(Boolean.parseBoolean(System.getProperty("FeatureName")));
}

测试名称看起来像-

JUnit测试图像

由于所访问的参数(例如“{0}”总是返回toString()表示,一个解决方法是在每种情况下进行匿名实现并覆盖toString()。例如:

public static Iterable<? extends Object> data() {
    return Arrays.asList(
        new MyObject(myParams...) {public String toString(){return "my custom test name";}},
        new MyObject(myParams...) {public String toString(){return "my other custom test name";}},
        //etc...
    );
}

看看JUnit 4.5,它的运行器显然不支持这一点,因为该逻辑隐藏在Parameterized类中的私有类中。您不能使用JUnit Parameterized运行器,而是创建自己的能够理解名称概念的运行器(这导致了如何设置名称的问题……)

从JUnit的角度来看,如果他们传递逗号分隔的参数,而不是(或除了)仅仅传递一个增量,那就更好了。TestNG就是这样做的。如果这个特性对你很重要,你可以在www.junit.org的雅虎邮件列表上发表评论。

你可以创建一个方法

@Test
public void name() {
    Assert.assertEquals("", inboundFileName);
}

虽然我不会一直用它,但弄清楚143到底是哪个测试数字还是很有用的。

在junit4.8.2中,您可以通过简单地复制Parameterized class来创建自己的MyParameterized类。更改TestClassRunnerForParameters中的getName()和testName()方法。