@ParameterizedTest 不使用参数

@ParameterizedTest not working with parameters

我正在为 Azure Functions 创建测试用例。我想使用参数化测试,但它拒绝接受任何有参数的测试。我使用官方的 Azure Functions Maven 原型来生成项目。这是 POM 中的相关部分(注意:我排除在外以确保我没有意外加载 junit4(没有更改任何内容),并且我的 POM 中没有特定的 surefire-plugin 配置部分)。

        <dependency>
            <groupId>com.microsoft.azure.functions</groupId>
            <artifactId>azure-functions-java-library</artifactId>
            <version>2.0.1</version>
            <exclusions>
                <exclusion>
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>

        <plugin>
                <groupId>com.microsoft.azure</groupId>
                <artifactId>azure-functions-maven-plugin</artifactId>
                <version>1.18.0</version>
                <configuration>
                    <appName>${functionAppName}</appName>
                    <resourceGroup>example</resourceGroup>
                    <appServicePlanName>example</appServicePlanName>
                    <region>example</region>
                    <!-- <pricingTier></pricingTier> -->
                    <!-- <disableAppInsights></disableAppInsights> -->
                    <runtime>
                        <!-- runtime os, could be windows, linux or docker-->
                        <os>linux</os>
                        <javaVersion>11</javaVersion>
                    </runtime>
                    <appSettings>
                        <property>
                            <name>FUNCTIONS_EXTENSION_VERSION</name>
                            <value>~4</value>
                        </property>
                    </appSettings>
                </configuration>
                <executions>
                    <execution>
                        <id>package-functions</id>
                        <goals>
                            <goal>package</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

这是测试代码:

public class FunctionTest {
    @Test
    public void testTrue() {
        assertTrue(true);
    }

    @ParameterizedTest
    @ValueSource(strings = {"example"})
    public void testNoParams() {
        assertTrue(true);
    }

    @ParameterizedTest
    @ValueSource(strings = {"example"})
    public void testOneParam(String string) {
        assertEquals(string, "example");
    }

    @ParameterizedTest
    @MethodSource
    public void testExtractSiteKeyShouldReturnMatchingGroup(String input, String output) throws Exception {
        Function function = new Function();
        assertEquals(function.extractSiteKey(Logger.getGlobal(), input), output);
    }

    private static Stream<Arguments> testExtractSiteKeyShouldReturnMatchingGroup() {
        return Stream.of(
            Arguments.of(null, null),
            Arguments.of("", null),
            Arguments.of(" ", null),
            Arguments.of("notmatching", null),
        );
    }
}

只有两个没有参数的测试是:

  <testcase classname="com.example.FunctionTest" name="com.example.FunctionTest.testNoParams" time="0.001"/>
  <testcase classname="com.example.FunctionTest" name="com.example.FunctionTest.testTrue" time="0"/>

作为一些额外的信息,它还拒绝选择没有以“测试”为前缀的测试用例,例如testOneParam 有效,oneParam 无效。

问题已通过在 2.22.2 以上的 maven-surefire 插件版本中显式添加得到解决:

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

开箱即用的版本是 2.12.4(显然它只从 junit 5.5.1 和 surefire-plugin 版本 2.22.2 开始使用 @ParameterTest 注释)