由于外部第三方问题,我有一组可能无法通过的测试。 我不希望测试在这种情况发生时失败,但是想要了解它。
发布t.Errorf()
并不是一个想法,因为它会停止所有后续测试。是否有某种“警告”我可以触发测试脚本发布然后继续进行剩余的测试?
答案 0 :(得分:1)
go测试工具就像编译器一样。对于编译器,无论是编译还是不编译,都没有警告。我认为你最接近的就是使用t.Skip。它将停止执行当前测试,但不会将其标记为失败。您不会在go test
的输出中看到任何内容,但是您必须使用go test -v
。
如果t.Skipf
函数失败,这是一个使用addExternal
的示例包。
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 ./...
测试多个软件包,我相信它们仍然可以运行。