wym*_*mli 2 unit-testing monkeypatching global-variables go
我对 golang 单元测试感到困惑。
我有 2 个Test_xxx函数,例如Test_1和Test_2。
在中Test_1,我将更改一个全局变量,可以Test_2看到变化吗?
此外,如果我使用monkey patch而不是更改全局变量,其他Test_xxx函数会感知到修补吗?
即,我是否有必要在返回时使用 defer 取消 func 替换Test_xxx?
Test_xxxfunc 访问 golang 中的共享数据安全吗?
答案完全取决于是否允许这些测试函数并行运行。
默认情况下,go test按顺序调用给定包的测试函数。然而,如果
t.Parallel()在两个测试函数中调用,并且您可能会遇到数据竞赛。
要修正想法,请考虑这个简单的测试文件:
package main
import (
"fmt"
"testing"
)
var count = 0
func Test_1(t *testing.T) {
t.Parallel()
count++
fmt.Println(count)
}
func Test_2(t *testing.T) {
t.Parallel()
count++
fmt.Println(count)
}
Run Code Online (Sandbox Code Playgroud)
如果你跑步go test -race,比赛检测器会拍打你的手腕:
==================
WARNING: DATA RACE
--snip--
FAIL
exit status 1
FAIL whatever 0.730s
Run Code Online (Sandbox Code Playgroud)
这应该让您相信在测试中处理全局状态时应该小心。如果可以的话,最好的办法是完全避免全局状态。或者,请记住,一旦激活并行测试执行,就必须注意同步对全局状态的访问。
| 归档时间: |
|
| 查看次数: |
1674 次 |
| 最近记录: |