使用jupiter的java参数化单元测试:更好地参考测试数据集

使用jupiter的java参数化单元测试:更好地参考测试数据集,java,gradle,junit5,parameterized,junit-jupiter,Java,Gradle,Junit5,Parameterized,Junit Jupiter,对于一个基于gradle的侧轨项目,我从junit4迁移到junit5(jupiter),这在编写参数化测试时允许更大的灵活性。太好了 然而,有一个恼人的细节使调试测试变得麻烦:与Intellij IDEA的测试运行程序不同,gradle测试运行程序将所有测试用例结果可视化为一个列表,但是列表的条目(因此测试用例)由参数化测试数据源中数据集条目的数字键引用。因此,不是像IDEA的测试运行者那样,通过实际的测试数据。这并不能真正帮助理解许多测试用例中的哪一个失败 我知道这是我面临的一个问题,因为我

对于一个基于gradle的侧轨项目,我从junit4迁移到junit5(jupiter),这在编写参数化测试时允许更大的灵活性。太好了

然而,有一个恼人的细节使调试测试变得麻烦:与Intellij IDEA的测试运行程序不同,gradle测试运行程序将所有测试用例结果可视化为一个列表,但是列表的条目(因此测试用例)由参数化测试数据源中数据集条目的数字键引用。因此,不是像IDEA的测试运行者那样,通过实际的测试数据。这并不能真正帮助理解许多测试用例中的哪一个失败

我知道这是我面临的一个问题,因为我将测试运行委托给了gradle。当使用IDEA自己的测试运行程序时,一切都很好。然而,我不太愿意使用这个:我使用gradle的原因是我使用了一个外部构建管道。而使用两个不同的测试跑步者似乎要处理不同的测试结果

所以我的问题是:如何让gradle测试运行程序使用实际的测试数据作为测试用例的参考?与IDEA的测试运行程序类似?我试着用一张地图,但朱庇特解释说,它无法流式传输。。。。 我发现的唯一解决方法是将一些数据集标识符输出到StdOut,但这会隐藏在输出的其余部分中。 谁能告诉我如何以更优雅的方式实现这一点?理想情况下,如以下示例所示

例如:

@ParameterizedTest
@MethodSource("allFactoredClasses")
public void clearInstances_shouldClearInstances(Class<? extends Factored> factoredClass) {
    // ...
}

static private Set<Class<? extends Factored>> allFactoredClasses() {
    Reflections reflections = new Reflections("com.example.project");
    return reflections.getSubTypesOf(Factored.class);
}
这是所需的可视化:

TestResults
  com.example.project.factory.FactoredTest
    v clearInstances_shouldClearInstances(Class)[Controller]
    v clearInstances_shouldClearInstances(Class)[Reader]
    v clearInstances_shouldClearInstances(Class)[Parser]
    x clearInstances_shouldClearInstances(Class)[Writer]
    v clearInstances_shouldClearInstances(Class)[Logger]
    v clearInstances_shouldClearInstances(Class)[Filter]
    v clearInstances_shouldClearInstances(Class)[Command]

这将更容易立即看到“Writer”数据集(Writer.class)的测试用例失败…

IDE的测试运行程序显示参数。我认为你看到的是Gradle的局限性,当IntelliJ将测试委托给Gradle时。如果可能,请尝试使用IntelliJ runner运行测试。@jbnize确实,这是一个基于gradle的项目。我开始时没有,但由于我必须使用外部管道,我被迫将控制权移交给gradle。使用IDE的测试运行程序意味着在管道中执行不同的测试,不确定这是否是一个好主意。。。无论如何,我试过了,因为我确实记得见过这样的事情,但没有任何改变。我在设置中将“使用构建和运行”和“使用运行测试”的设置从“Gradle”更改为“Intellij IDEA”。还有其他需要考虑的吗?在重新运行测试之前一定要删除以前的运行配置,否则因特利利只是重新启动它。@ JBNIZET啊,就这样,谢谢!我之前只是使缓存失效并重新启动IDE,但忘记删除运行配置。谢谢你的提示!虽然我仍然不确定使用两个不同的测试跑步者是否是一个好主意…@JBNizet我修改了问题,指出了两个测试跑步者之间的差异。再次感谢。
TestResults
  com.example.project.factory.FactoredTest
    v clearInstances_shouldClearInstances(Class)[Controller]
    v clearInstances_shouldClearInstances(Class)[Reader]
    v clearInstances_shouldClearInstances(Class)[Parser]
    x clearInstances_shouldClearInstances(Class)[Writer]
    v clearInstances_shouldClearInstances(Class)[Logger]
    v clearInstances_shouldClearInstances(Class)[Filter]
    v clearInstances_shouldClearInstances(Class)[Command]