0

对于基于 gradle 的侧轨项目,我从 junit4 移动到 junit5(jupiter),这在编写参数化测试时提供了更大的灵活性。那太棒了。

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

我知道这是我面临的一个问题,因为我将测试运行委托给了 gradle。使用 IDEA 自己的测试运行程序时一切正常。但是,我犹豫要不要使用那个:我使用 gradle 的原因是我使用了外部构建管道。并且使用两个不同的测试运行器闻起来就像必须处理不同的测试结果......

所以我的问题是:如何让 gradle 测试运行器使用实际的测试数据作为测试用例的参考?类似于 IDEA 的测试运行器所做的事情?我尝试使用地图,但 jupiter 解释说它无法流式传输.... 我发现的唯一解决方法是将一些数据集标识符输出到 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)[1]
    v clearInstances_shouldClearInstances(Class)[2]
    v clearInstances_shouldClearInstances(Class)[3]
    x clearInstances_shouldClearInstances(Class)[4]
    v clearInstances_shouldClearInstances(Class)[5]
    v clearInstances_shouldClearInstances(Class)[6]
    v clearInstances_shouldClearInstances(Class)[7]

这是所需的可视化:

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)的测试用例失败......

4

0 回答 0