Модульный тест для проверки извлечения из файла конфигурации

В искровом проекте мы используем 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, чтобы проверить их существование в файле конфигурации, но я не могу найти способ получить все экземпляры вызова метода и создать тест для параметра.

Есть ли что-то, о чем я не подумал?


person Gabber    schedule 10.09.2019    source источник
comment
что вы подразумеваете под получением всех экземпляров? Вы хотите проверить, не содержат ли все файлы конфигурации tout ошибок?   -  person firsni    schedule 10.09.2019
comment
Нет, мне нужно убедиться, что все вызовы config.getString(x) с литералом x не завершатся ошибкой для данного файла конфигурации. Спасибо за комментарий, я обновлю свой вопрос   -  person Gabber    schedule 10.09.2019


Ответы (1)


Одним из решений является предоставление конфигурации в Singleton, который вы инициализируете при запуске сервера, поэтому сервер запускается только в том случае, если конфигурация правильная. Или запустите конфигурации в модульных тестах.

В этом синглтоне вы загружаете свою конфигурацию в один values или case classes в зависимости от количества значений.

Мы используем pureconfig, что упрощает отображение конфигурации непосредственно в case classes.

Вот пример без Pure Script: DemoAdapterContext и AdaptersContext.

Дайте мне знать, если вам нужна дополнительная информация.

person pme    schedule 10.09.2019
comment
Спасибо за подсказку про pureconfig, я посмотрю. Однако, если возможно, я бы не стал менять большую часть своего кода, а добавление pureconfig заставило бы меня сделать это. - person Gabber; 10.09.2019
comment
см. ссылку - с примером из более старого проекта без Pure Script - он также логирует конфиг при запуске - person pme; 10.09.2019