- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试模拟 Go 函数 os.GetEnv()
在我的测试文件中,以便我可以获得特定环境变量的所需值。
比如我已经定义了。abc := os.GetEnv("XYZ_URL")
在这里,我应该能够获得变量 abc
所需的值。 .我也有几个地方有 GetEnv
职能。
如果有人可以在没有任何 Go 框架帮助的情况下给我一个解决方法,那将非常有帮助。
最佳答案
首先,您不能模拟该功能。您只能模拟作为接口(interface)公开的东西。
其次,你可能不需要。从广义上讲,模拟被过度使用,应尽可能避免。
在测试环境变量时,您几乎没有选择。
如果您使用 Go 1.17 或更新版本,您可以利用新的 Setenv
函数,它仅在当前测试期间设置环境变量:
func TestFoo(t *testing.T) {
t.Setenv("XYZ_URL", "http://example.com")
/* do your tests here */
}
对于旧版本的 Go,请考虑以下选项:
type OS interface {
Getenv(string) string
}
type defaultOS struct{}
func (defaultOS) Getenv(key string) string {
return os.Getenv(key)
}
// Then in your code, replace `os.Getenv()` with:
myos := defaultOS{}
value := myos.Getenv("XYZ_URL")
在您的测试中,创建一个满足接口(interface)的自定义实现,但提供测试所需的值。
time
包),但对于
os.Getenv
可能是一种不好的方法。 .
os.Getenv
, 而只是将值传入。示例,而不是:func connect() (*DB, error) {
db, err := sql.Connect(os.Getenv("XYZ_URL"), ...)
/* ... */
return db, err
}
采用:
func connect(url string) (*DB, error) {
db, err := sql.Connect(url, ...)
/* ... */
return db, err
}
从某种意义上说,这只“移动”了问题——你可能仍然想测试调用者,它使用
os.Getenv()
,但是您至少可以减少依赖此方法的 API 的表面积,这使得第三种方法更容易。
func TestFoo(t *testing.T) {
orig := os.Getenv("XYZ_URL")
os.Setenv("XYZ_URL", "http://example.com")
t.Cleanup(func() { os.Setenv("XYZ_URL", orig) })
/* do your tests here */
}
这种方法确实有局限性。特别是,并行运行多个这些测试是行不通的,因此您仍然希望尽量减少运行这些测试的数量。
var getenv = os.Getenv
/* ... then in your code ... */
func foo() {
value := getenv("XYZ_URL") // Instead of calling os.Getenv directly
}
并在测试中:
func TestFoo(t *testing.T) {
getenv = func(string) string { return "http://example.com/" }
/* ... your actual tests ... */
}
这与选项#3 有许多相同的限制,因为您不能并行运行多个测试,因为它们会发生冲突。
关于unit-testing - 模拟 os.GetEnv ("ENV_VAR"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66061175/
使用 devtools::check(document = FALSE, env_vars="_R_S3_METHOD_LOOKUP_BASEENV_AFTER_GLOBALENV_= TRUE")
我正在尝试模拟 Go 函数 os.GetEnv()在我的测试文件中,以便我可以获得特定环境变量的所需值。 比如我已经定义了。abc := os.GetEnv("XYZ_URL")在这里,我应该能够获得
-Dfoo.path=${env_var:FOO_ENV_KEY}? ${env_var:FOO_ENV_KEY} 看起来不行,只能使用 -Dapp.log.path=BAR_ENV_VALUE。
首先让我说我认为这是我的问题。我不是 100% 确定。我希望有人能告诉我我在这里是否正确... 我正在编写一个脚本,用于从用户区的源代码安装我的首选服务器堆栈。该脚本的一部分涉及使用 PHP 插件安装
我一直在尝试部署我的 firebase&vue 应用程序。但是我无法将 firebase 凭据添加到 env 变量。 基本上这是 vue.js 上的结构 配置 ---- key.js ----keys
我的 nginx 配置文件: location / { include uwsgi_params; uwsgi_param UWSGI_PYHOME /usr; uwsgi_p
我想将配置(在这种情况下,站点名称)放入主管 环境变量,用于在 program:x 命令参数中进行扩展。这是支持的吗?文档的措辞似乎表明是的。 以下语法在 supervisor-3.0(配置文件摘录)
这个问题我坚持了很久: 我有一个标准的 NextJS 应用程序,它使用环境变量(用于客户端 NEXT_PUBLIC_MY_VAR 以及服务器端 MY_OTHER_VAR)。 我使用带有微型自定义 .g
我是一名优秀的程序员,十分优秀!