我已经编写了一个Go应用程序,所有软件包都具有完整的测试覆盖率。我正在编写我的包 - 它将处理函数中应用程序的所有初始设置 - 此函数当前读取14个环境变量,然后在应用程序中设置相关变量。代码的简单概述如下:mainmain()
func main() {
myStruct1 := privatePackage.myStructType{}
myStruct2 := publicPackage.otherStructType{}
if config1 := os.Getenv("CONFIG_FOO"); config1 != "" {
myStruct1.attribute1 = config1
}
// ....
if config14 := os.Getenv("CONFIG_BAR"); config14 != "" {
myStruct2.attribute5 = config14
}
}
当我测试单元 env 变量/OS 参数时,我通常只直接在测试函数中设置 env 变量 - 所以像这样:
func TestMyArgument(t *testing.T) {
os.Setenv("CONFIG_BAZ", "apple")
//Invoke function that depends on CONFIG_BAZ
//Assert that expected outcome occurred
}
我几乎总是使用表驱动的测试,所以上面的代码片段是一个简化的例子。
问题在于,我的函数接收了 14 个(并且还在增长)env 变量,虽然一些 env 变量本质上是枚举(因此有少量有效选项 - 例如,有少量数据库驱动程序可供选择),但其他 env 变量具有几乎无限的潜在值。那么,如何有效地覆盖潜在配置的所有(或足够多的)排列呢?main()
编辑:部署此应用程序后,它将进入K8s集群。其中一些变量是从安全存储中提取的机密。使用 JSON 文件是不可行的,因为某些值需要轻松加密/更改。此外,使用JSON文件需要我存储此文件并在数百/数千个正在运行的 Pod 之间共享它 - 然后此存储将充当故障点。为了澄清,这个问题不是关于env vars VS配置文件;这个问题是关于当有大量可配置变量时进行测试的最佳方法 - 每个变量都有大量的潜在值 - 导致数千个可能的配置排列。在这种情况下,如何保证足够的测试覆盖率?
冉冉说
天涯尽头无女友
弑天下
随时随地看视频慕课网APP
相关分类