Golang测试脚本可以发出警告而不是错误吗?

时间:2016-09-06 21:11:37

标签: testing go

由于外部第三方问题,我有一组可能无法通过的测试。 我不希望测试在这种情况发生时失败,但是想要了解它。

发布t.Errorf()并不是一个想法,因为它会停止所有后续测试。是否有某种“警告”我可以触发测试脚本发布然后继续进行剩余的测试?

1 个答案:

答案 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.Errorft.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 ./...测试多个软件包,我相信它们仍然可以运行。