@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 注释)
我正在为 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 注释)