Gradle test.include vs test.filter.includeTestsMatching

kokeuurv  于 2023-10-19  发布在  其他
关注(0)|答案(1)|浏览(150)

在web上有很多使用test.过滤测试的例子,包括:

test {
    useJUnitPlatform()
    include("**/*IT*")
}

Documentation says:includes -用于测试执行的包含模式。
但是gradle java测试的官方文档说应该使用test.filter.includeTestsMatching:

test {
    useJUnitPlatform()
    filter {
        includeTestsMatching("*IT*")
    }
}

Documentation says:includeTestsMatching -将测试名称模式添加到包含筛选器。
除了后者允许在方法级别上进行过滤之外,这些方法之间的关键区别是什么?

3lxsmp7m

3lxsmp7m1#

include(...)并不特定于test任务。它来自test任务类型实现的PatternFilterable。这是一个接受Ant样式路径模式的通用过滤器。一些任务类型也实现了此功能,例如jarwavjavaCompile和更多任务。从本质上讲,如果一个任务对一个文件进行操作,那么它很可能实现了PatternFilterable,因此你可以使用include(...)。这方面的文档可以在Working With Files文档中找到,尽管它没有像下面的测试过滤那样显式地调用。
filter { }专用于测试(如果Gradle 1.10之后的测试很重要,则更新)。关键的区别是include(...)只对文件进行操作,而filter { }对测试本身进行操作 并挂钩到测试引擎(JUnit,TestNG等)。它允许您筛选特定的测试方法,例如:

test {
    filter {
        includeTest "org.gradle.SomeTest", "someTestMethod"
    }
}

这意味着执行特定的测试类 * 和 * 方法。你不能用include(...)做这个,因为它只对文件本身进行操作。有关更多详细信息,请参见测试过滤

相关问题