Scala为特定测试设置配置值

Scala为特定测试设置配置值,scala,testing,config,Scala,Testing,Config,我有一个reference.conf文件,它将配置值指定为 prop { type = 2 } 我有scala测试类,在它下面有很多测试。 我希望此配置值在所有测试中保持不变,但有一个测试要求它为3。 为一个特定测试加载不同配置值的最佳方法是什么?现在配置值会自动加载,因为我扩展了ScalatestRouteTest 因此,我如何特别为该测试创建配置文件(或字符串),并通过在加载配置时指定它来加载它呢?如果您可以控制config对象(因为它可能是作为参数传递的),您只需覆盖配置中的某个

我有一个reference.conf文件,它将配置值指定为

prop {
    type = 2
}
我有scala测试类,在它下面有很多测试。 我希望此配置值在所有测试中保持不变,但有一个测试要求它为3。 为一个特定测试加载不同配置值的最佳方法是什么?现在配置值会自动加载,因为我扩展了ScalatestRouteTest


因此,我如何特别为该测试创建配置文件(或字符串),并通过在加载配置时指定它来加载它呢?如果您可以控制
config
对象(因为它可能是作为参数传递的),您只需覆盖配置中的某个值:

val config = ConfigFactory.load.withValue(
    "prop.type",
    ConfigValueFactory.fromAnyRef(5)
).resolve()
如果任何其他属性依赖于
prop.type
,则需要调用
resolve
,例如:

prop.type2=${prop.type}+1

您还可以使用系统属性,因为它们直接映射到配置中的值

这意味着您可以在测试开始时执行以下操作:

System.setProperty("prop.type", 5.toString)
ConfigFactory.invalidateCaches()
当然,由于以编程方式更改系统属性不是线程安全的,因此它不适用于生产代码,而仅适用于测试