В искровом проекте мы используем Typesafe Config. У нас есть большой файл конфигурации с некоторой (необходимой) избыточностью. Довольно легко сослаться не на ту ветку конфига json и иногда ошибка проскакивает на продакшен код.
Мне нужно убедиться, что все вызовы config.getString(x) с литералом x не завершатся ошибкой для данного файла конфигурации.
Я хотел бы написать модульный тест, который проверяет каждую строку, используемую в моем приложении, для получения значение конфигурации.
Возможное решение, которое мы нашли, состоит в том, чтобы предварительно загрузить все значения конфигурации в класс case, поэтому
val rawPath = config.getString("comp1.data.files.rawData")
val coresNumber = config.getLong("comp1.setup.cores")
станет
case class ConfigData(rawPath:String, coresNumber:Long)
def initConfig():ConfigData ={
val rawPath = config.getString("comp1.data.files.rawData")
val coresNumber = config.getLong("comp1.setup.cores")
ConfigData(rawPat,coresNumber)
}
val conf = initConfig()
val rawPath = conf.rawPath
val coresNumner = conf.coresNumber
а затем просто вызовите initData()
для проверки ошибок загрузки конфигурации.
Я также думал об использовании отражения scala, но мне нужно было бы найти все места в моем коде, где вызывается config.getString(x)
, а затем получить x
, чтобы проверить их существование в файле конфигурации, но я не могу найти способ получить все экземпляры вызова метода и создать тест для параметра.
Есть ли что-то, о чем я не подумал?