我在应用程序中使用Spring,并且我想用JUnit创建一个单元测试。如何使用“生产”属性文件运行测试?如何使用测试属性文件运行测试?
这是描述属性文件的数据类:
@Component
@ConfigurationProperties(prefix = "time")
@PropertySource(
value = ["classpath:config/targets/target.time.config.yml"],
factory = YamlPropertySourceFactory::class,
encoding = "UTF-8"
)
data class TargetTimeUnitConfig( ... )
这是一个测试,我想使用TargetTimeUnitConfig中的生产或特定属性来测试DateTimeParser:
@SpringBootTest(classess = [TargetTimeUnitConfig::class, DateTimeParser::class]
@ExtendWith(SpringExtension::class)
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class DateTimeParserTest {
我希望DateTimeParserTest
仅在Spring上下文中与TargetTimeUnitConfig
,DateTimeParser
一起运行。
现在,现在,不会加载指定目录(classpath:config/targets/target.time.config.yml
)中的文件。
如何解决?如何从测试资源中加载属性?
答案 0 :(得分:0)
这是我的解决方法:
TargetTimeUnitConfig
@Component
@ConfigurationProperties(prefix = "time")
@PropertySource(
value = ["\${spring.config.location:classpath:}\${targetTimeConfig:config/targets/target.time.config.yml}"],
factory = YamlPropertySourceFactory::class,
encoding = "UTF-8"
)
data class TargetTimeUnitConfig(
TargetTimeUnitConfigTest
@SpringBootTest(
classes = [DateTimeParser::class],
properties = ["targetTimeConfig=targettimeunitconfig/target.time.config.yml"])
@ExtendWith(SpringExtension::class)
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@EnableConfigurationProperties(TargetTimeUnitConfig::class)
class TargetTimeUnitConfigTest {
我使用2个环境变量(spring.config.location,targetTimeConfig),它们允许使用不同的配置运行测试和应用程序。它还允许您更改生产配置的位置。
但是它看起来很恐怖,并且包含很多潜在的错误。