如何使用PropertySource文件进行单元测试?

时间:2019-04-11 15:02:39

标签: spring junit

我在应用程序中使用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上下文中与TargetTimeUnitConfigDateTimeParser一起运行。

现在,现在,不会加载指定目录(classpath:config/targets/target.time.config.yml)中的文件。

如何解决?如何从测试资源中加载属性?

1 个答案:

答案 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),它们允许使用不同的配置运行测试和应用程序。它还允许您更改生产配置的位置。

但是它看起来很恐怖,并且包含很多潜在的错误。