Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 检查从配置文件检索的单元测试_Scala_Typesafe Config - Fatal编程技术网

Scala 检查从配置文件检索的单元测试

Scala 检查从配置文件检索的单元测试,scala,typesafe-config,Scala,Typesafe Config,在spark项目中,我们使用类型安全配置。我们有一个带有一些(必要的)冗余的大配置文件。很容易引用配置json的错误分支,有时错误会转移到生产代码中 我需要验证,对于给定的配置文件,所有对config.getString(x)的x文本调用都不会失败。 我想编写一个单元测试,检查应用程序中使用的每个字符串,以获得配置值 我们找到的一个可能的解决方案是将所有配置值预加载到一个case类中,以便 val rawPath = config.getString("comp1.data.files.rawD

在spark项目中,我们使用类型安全配置。我们有一个带有一些(必要的)冗余的大配置文件。很容易引用配置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
以测试它们在配置文件中的存在性,但我找不到一种方法来获取方法调用的所有实例并对参数创建测试


有什么我没有想到的吗?

一个解决方案是在单例中提供配置,您在启动服务器时对其进行初始化-因此只有在配置正确时服务器才会启动。或者在单元测试中运行配置

在此单例中,根据值的数量,您可以在单个
案例类
中加载配置

我们使用它可以非常简单地将配置直接映射到
案例类中

下面是一个没有纯脚本的示例:and


如果您需要更多信息,请告诉我。

获取所有实例是什么意思?是否要测试所有tout配置文件是否都不包含错误?否,我需要验证对给定配置文件使用x literal对config.getString(x)的所有调用都不会失败。谢谢你的评论,我会更新我的问题谢谢你关于pureconfig的提示,我会调查的。但是,如果可能的话,我不希望在添加pureconfig时对代码进行太多更改,因为这样做会让我看到链接—使用一个没有纯脚本的旧项目的示例—它还会在启动时记录配置