Maven + Spock -参数化测试报告的额外测试

0g0grzrc  于 2023-11-17  发布在  Maven
关注(0)|答案(1)|浏览(136)

我正在清理我们的测试套件,我看到的一件事是,在展开的参数化Spock测试中,maven surefire报告了一个额外的“测试”,用于无数据的标题行。这是使用Spock 2.3。下面是一个示例测试文件:

package com.sample.utility

import org.joda.time.LocalDate
import spock.lang.Specification

class DateUtilityTest extends Specification {

    def "#years years from today being over 21 is #result"() {
        expect:
        DateUtility.isOver21(new LocalDate().plusYears(years).toDate()) == result

        where:
        years || result
        -20   || false
        -21   || true
        -22   || true
    }

    def "#years years from today being over 18 is #result"() {
        expect:
        DateUtility.isOver18(new LocalDate().plusYears(years).toDate()) == result

        where:
        years || result
        -17   || false
        -18   || true
        -19   || true
    }
}

字符串
当然,预期是运行6个测试,每个方法3个,如果我在那里运行测试,这就是Intellij报告的方式。然而,当运行mvn test时:

[INFO] Running com.sample.DateUtilityTest
[INFO] Tests run: 8, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.025 s -- in com.sample.DateUtilityTest


这也是Jenkins报告的方式,带有测试名称:

  • 从今天起的#年超过18岁是#结果
  • 从今天起的#年超过21岁是#结果
  • 17年后的今天超过18岁是错误的
  • -18年后的今天超过18岁是真的
  • 从今天起19年后超过18岁是真的
  • 20年后的今天超过21岁是错误的
  • -21年后的今天超过21岁是真的
  • -22年后的今天超过21岁是真的

pom中的插件定义是

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>3.1.2</version>

    <dependencies>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.9.1</version>
        </dependency>
    </dependencies>
</plugin>


有没有一种方法可以配置这些东西,使maven不会报告对标题行的额外测试?

egmofgnx

egmofgnx1#

这是this Q/A的准副本。正如您在那里看到的,这是JUnit 5平台的特性,绝不限于Spock,而且还影响参数化的JUnit Jupiter测试。
至于如何让你的报告名称更人性化,我建议这样做:

@Unroll("age #years years, result is #result")
def "check if at least 21 years old"()

字符串
然后,测试容器将有一个干净的名称,其中的每个参数化测试也会有一个干净的名称。在像IntelliJ IDEA这样的IDE中,它也会看起来更好。

相关问题