我有一组测试可能由于外部第 3 方问题而无法通过。 我不希望发生这种情况时测试失败,但希望让大家知道。
发出 t.Errorf()
不是一个好主意,因为它会停止所有后续测试。是否有某种“警告”我可以触发测试脚本将发布,然后继续其余的测试?
最佳答案
go测试工具就像编译器。对于编译器来说,无论编译或不编译,都没有警告。我认为你会得到的最接近的东西是使用 t.Skip 。它将停止执行当前测试,但不会将其标记为失败。但是,您不会在 go test
的输出中看到任何内容,因此您必须使用 go test -v
。
下面是一个示例包,如果 addExternal
函数失败,它会使用 t.Skipf
。
package app
import "testing"
func add(a, b int) int {
return a + b
}
func addExternal(a, b int) int {
return 4
}
func divide(a, b int) int {
return a / b
}
func TestThing(t *testing.T) {
got := add(1, 2)
want := 3
if got != want {
t.Errorf("add(1, 2) = %d, want %d", got, want)
}
}
func TestExternalThing(t *testing.T) {
got := addExternal(3, 4)
want := 7
if got != want {
t.Skipf("addExternal(3, 4) = %d, want %d", got, want)
}
}
func TestAnotherThing(t *testing.T) {
got := divide(6, 3)
want := 2
if got != want {
t.Errorf("divide(6, 3) = %d, want %d", got, want)
}
}
这是运行该程序的输出。注意返回状态为0,视为包裹已通过
$ go test -v
=== RUN TestThing
--- PASS: TestThing (0.00s)
=== RUN TestExternalThing
--- SKIP: TestExternalThing (0.00s)
app_test.go:29: addExternal(3, 4) = 4, want 7
=== RUN TestAnotherThing
--- PASS: TestAnotherThing (0.00s)
PASS
ok github.com/jcbwlkr/app 0.006s
$ echo $?
0
请注意,如果我将 t.Skipf
更改为 t.Errorf
或 t.Fatalf
我会得到此输出
$ go test -v
=== RUN TestThing
--- PASS: TestThing (0.00s)
=== RUN TestExternalThing
--- FAIL: TestExternalThing (0.00s)
app_test.go:29: addExternal(3, 4) = 4, want 7
=== RUN TestAnotherThing
--- PASS: TestAnotherThing (0.00s)
FAIL
exit status 1
FAIL github.com/jcbwlkr/app 0.005s
$ echo $?
1
包中的其他测试仍在运行。如果我正在测试多个包,例如使用 go test -v ./...
我相信它们仍然会运行。
关于testing - Golang 测试脚本可以发出警告而不是错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39357910/