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

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


当前回答

我最近在使用JUnit 4.3.1时遇到了同样的问题。我实现了一个新的类,它扩展了Parameterized,称为LabelledParameterized。它已经使用JUnit 4.3.1、4.4和4.5进行了测试。它使用@Parameters方法中每个参数数组的第一个参数的String表示形式重新构造Description实例。你可以在这里看到代码:

http://code.google.com/p/migen/source/browse/trunk/java/src/.../LabelledParameterized.java?r=3789

下面是它在以下场合的用法:

http://code.google.com/p/migen/source/browse/trunk/java/src/.../ServerBuilderTest.java?r=3789

测试描述在Eclipse中的格式很好,这是我想要的,因为这使得失败的测试更容易找到!我可能会在接下来的几天/几周内进一步完善和记录这些类。去掉'?'部分的url,如果你想要最先进的。:-)

要使用它,您所要做的就是复制这个类(GPL v3),并假设参数列表的第一个元素是一个合理的标签,将@RunWith(Parameterized.class)更改为@RunWith(LabelledParameterized.class)。

我不知道JUnit的后续版本是否解决了这个问题,但即使他们解决了,我也不能更新JUnit,因为我的所有合作开发人员也必须更新,我们有比重新工具更重要的优先级。因此,类中的工作可以被多个版本的JUnit编译。


注意:这里有一些反射花招,这样它就可以在上面列出的不同JUnit版本之间运行。针对JUnit 4.3.1的版本可以在这里找到,针对JUnit 4.4和4.5的版本可以在这里找到。

其他回答

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

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

由于所访问的参数(例如“{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...
    );
}

参数化测试在内部调用toString()。 如果您创建覆盖toString()的对象包装器,它将改变测试的名称。

这里有一个例子,我在其他帖子中回答过。 https://stackoverflow.com/a/67023556/1839360

我最近在使用JUnit 4.3.1时遇到了同样的问题。我实现了一个新的类,它扩展了Parameterized,称为LabelledParameterized。它已经使用JUnit 4.3.1、4.4和4.5进行了测试。它使用@Parameters方法中每个参数数组的第一个参数的String表示形式重新构造Description实例。你可以在这里看到代码:

http://code.google.com/p/migen/source/browse/trunk/java/src/.../LabelledParameterized.java?r=3789

下面是它在以下场合的用法:

http://code.google.com/p/migen/source/browse/trunk/java/src/.../ServerBuilderTest.java?r=3789

测试描述在Eclipse中的格式很好,这是我想要的,因为这使得失败的测试更容易找到!我可能会在接下来的几天/几周内进一步完善和记录这些类。去掉'?'部分的url,如果你想要最先进的。:-)

要使用它,您所要做的就是复制这个类(GPL v3),并假设参数列表的第一个元素是一个合理的标签,将@RunWith(Parameterized.class)更改为@RunWith(LabelledParameterized.class)。

我不知道JUnit的后续版本是否解决了这个问题,但即使他们解决了,我也不能更新JUnit,因为我的所有合作开发人员也必须更新,我们有比重新工具更重要的优先级。因此,类中的工作可以被多个版本的JUnit编译。


注意:这里有一些反射花招,这样它就可以在上面列出的不同JUnit版本之间运行。针对JUnit 4.3.1的版本可以在这里找到,针对JUnit 4.4和4.5的版本可以在这里找到。