Spring使用 Junit 5 启动 Cucumber 测试不会加载应用程序-test.properties
Spring Boot Cucumber Test with Junit 5 will not load application-test.properties
我无法让我的 Cucumber 测试从 application-test.properties 文件中读取,该文件位于 test/resources 文件夹中。 Cucumber 测试正在读取功能,但应用程序无法启动,因为 @Value 注释未从 application-test.properties 文件中获取值(值为 null)。所以所有的测试都失败了。 Cucumber 测试在 Junit 4 上运行良好。为什么我的 Cucumber 测试无法从应用程序属性文件中读取?
在我的一个应用程序 classes 中,我使用 @Value("${connection.string}")
注释来检索 application-test.properties 文件中的硬编码连接字符串。连接字符串为空,因此应用程序因实例化错误而无法启动。
属性文件位于:
test/resources/application-test.properties
、target/test-classes/application-test.properties
这是我的申请 class:
@SpringBootApplication
@EntityScan(basePackages = { "com.sams.payout.models.dto" })
@ComponentScan(basePackages = { "com.sams.payout", "com.samcash" })
@Slf4j
public class SampleSpringApplication {
public static void main(String[] args) {
SpringApplication.run(SampleSpringApplication.class, args);
log.info("Application Started");
}
}
这是测试应用:
@CucumberContextConfiguration
@SpringBootTest(classes = SampleSpringApplication.class)
@ContextConfiguration(classes = TestHelper.class)
@ActiveProfiles("test")
public class SampleTestApp {
}
这是功能测试:
@Suite
@IncludeEngines("cucumber")
@SelectClasspathResource("features")
@ConfigurationParameters({
@ConfigurationParameter(key = PLUGIN_PROPERTY_NAME, value = "pretty,json:target/cucumber.json"),
@ConfigurationParameter(key = JUNIT_PLATFORM_NAMING_STRATEGY_PROPERTY_NAME, value = "long")
})
@ActiveProfiles("test")
public class SampleFT {
}
黄瓜测试没有任何问题,因为它们使用 Junit 4。
部分pom.xml:
<dependency>
<groupId>au.com.dius.pact.provider</groupId>
<artifactId>junit5</artifactId>
<version>4.1.36</version>
</dependency>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<scope>test</scope>
</dependency>
<!--Functional tests -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.9.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-java</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-junit-platform-engine</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-spring</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>net.masterthought</groupId>
<artifactId>cucumber-reporting</artifactId>
<version>${cucumber-reporting.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-core</artifactId>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-suite</artifactId>
<scope>test</scope>
</dependency>
Junit版本为5.8.1,spring-boot版本为2.6.7,Cucumber版本为7.3.3,使用BOM。
@Suite
@IncludeEngines("cucumber")
...
@ActiveProfiles("test")
public class SampleFT {
}
此处ActiveProfiles
什么都不做。此 class 不用于构建测试应用程序上下文。
@CucumberContextConfiguration
@SpringBootTest(classes = SampleSpringApplication.class)
@ContextConfiguration(classes = TestHelper.class)
@ActiveProfiles("test")
public class SampleTestApp {
}
此 SampleTestApp
用于构建测试应用程序上下文,因为它带有 CucumberContextConfiguration
注释。但是 SpringBootTest
和 ContextConfiguration
都会尝试配置应用程序上下文。您是要将 TestHelper
添加到 classes
吗?
我无法让我的 Cucumber 测试从 application-test.properties 文件中读取,该文件位于 test/resources 文件夹中。 Cucumber 测试正在读取功能,但应用程序无法启动,因为 @Value 注释未从 application-test.properties 文件中获取值(值为 null)。所以所有的测试都失败了。 Cucumber 测试在 Junit 4 上运行良好。为什么我的 Cucumber 测试无法从应用程序属性文件中读取?
在我的一个应用程序 classes 中,我使用 @Value("${connection.string}")
注释来检索 application-test.properties 文件中的硬编码连接字符串。连接字符串为空,因此应用程序因实例化错误而无法启动。
属性文件位于:
test/resources/application-test.properties
、target/test-classes/application-test.properties
这是我的申请 class:
@SpringBootApplication
@EntityScan(basePackages = { "com.sams.payout.models.dto" })
@ComponentScan(basePackages = { "com.sams.payout", "com.samcash" })
@Slf4j
public class SampleSpringApplication {
public static void main(String[] args) {
SpringApplication.run(SampleSpringApplication.class, args);
log.info("Application Started");
}
}
这是测试应用:
@CucumberContextConfiguration
@SpringBootTest(classes = SampleSpringApplication.class)
@ContextConfiguration(classes = TestHelper.class)
@ActiveProfiles("test")
public class SampleTestApp {
}
这是功能测试:
@Suite
@IncludeEngines("cucumber")
@SelectClasspathResource("features")
@ConfigurationParameters({
@ConfigurationParameter(key = PLUGIN_PROPERTY_NAME, value = "pretty,json:target/cucumber.json"),
@ConfigurationParameter(key = JUNIT_PLATFORM_NAMING_STRATEGY_PROPERTY_NAME, value = "long")
})
@ActiveProfiles("test")
public class SampleFT {
}
黄瓜测试没有任何问题,因为它们使用 Junit 4。
部分pom.xml:
<dependency>
<groupId>au.com.dius.pact.provider</groupId>
<artifactId>junit5</artifactId>
<version>4.1.36</version>
</dependency>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<scope>test</scope>
</dependency>
<!--Functional tests -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.9.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-java</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-junit-platform-engine</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-spring</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>net.masterthought</groupId>
<artifactId>cucumber-reporting</artifactId>
<version>${cucumber-reporting.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-core</artifactId>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-suite</artifactId>
<scope>test</scope>
</dependency>
Junit版本为5.8.1,spring-boot版本为2.6.7,Cucumber版本为7.3.3,使用BOM。
@Suite
@IncludeEngines("cucumber")
...
@ActiveProfiles("test")
public class SampleFT {
}
此处ActiveProfiles
什么都不做。此 class 不用于构建测试应用程序上下文。
@CucumberContextConfiguration
@SpringBootTest(classes = SampleSpringApplication.class)
@ContextConfiguration(classes = TestHelper.class)
@ActiveProfiles("test")
public class SampleTestApp {
}
此 SampleTestApp
用于构建测试应用程序上下文,因为它带有 CucumberContextConfiguration
注释。但是 SpringBootTest
和 ContextConfiguration
都会尝试配置应用程序上下文。您是要将 TestHelper
添加到 classes
吗?