Scala为特定测试设置配置值

时间:2020-03-18 03:26:16

标签: scala testing config

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

prop {
    type = 2
}

我有scala测试课程,并且根据课程进行了很多测试。 我希望所有测试的配置值都保持不变,但一项测试要求为3。 为一个特定的测试加载不同的配置值的最佳方法是什么?现在,由于我扩展了ScalatestRouteTest,配置值会自动加载。

那么我该如何针对该测试制作一个配置文件(或字符串),并通过在加载配置时指定它来加载它

1 个答案:

答案 0 :(得分:1)

如果您可以控制Config对象(因为它可能作为参数传递),则可以在config中覆盖一些值:

val config = ConfigFactory.load.withValue(
    "prop.type",
    ConfigValueFactory.fromAnyRef(5)
).resolve()

如果其他任何属性取决于resolve,则必须调用prop.type,例如:

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

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

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

System.setProperty("prop.type", 5.toString)
ConfigFactory.invalidateCaches()

当然,由于以编程方式更改系统属性不是线程安全的,因此它不适用于生产代码,而仅适用于测试。