Typesafe Config:为单元测试目的覆盖值

Typesafe Config: Overriding values for unit testing purposes

在需要 config: Config 的 class 单元测试中,我想直观地声明(而不是在位于其他地方的配置文件中)测试的假定配置设置.

例如,我想做这样的事情:

class myClassSpec extends AnyFlatSpec{
  val myTestingConfigForThisTestCase = 3L
  val config = ConfigFactory.load()
                .withValue("my-config-path", myTestingConfigForThisTestCase)
  ...
}

但是,withValue 需要一个 ConfigValue 并且基本类型和那个之间似乎没有隐式转换。

有什么简单的解决方案吗?

您可能想使用 ConfigValueFactory - 很可能是

ConfigFactory.load()
  .withValue(
    "my-config-path", 
    ConfigValueFactory.fromAnyRef(myTestingConfigForThisTestCase)
  )

虽然这不能很好地扩展 - 即,如果您需要覆盖超过 2-3 个设置,它会比 ConfigFactory.parseString + withFallback:

获得更多样板
val configOverride = """
{
   my-config-path: $myTestingConfigForThisTestCase
   other-config {
      ...
   }
}
"""
val config = ConfigFactory.parseString(configOverride)
   .withFallback(ConfigFactory.load())