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

标签 testing go

我有一组测试可能由于外部第 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.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 ./... 我相信它们仍然会运行。

关于testing - Golang 测试脚本可以发出警告而不是错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39357910/

相关文章:

unit-testing - 测试框架 : Is Google Truth a substitute for JUnit? 如何编写测试方法和测试套件?

java - TestNG - 工厂 - 无法保存工厂参数供以后使用

testing - 使用 dbunit 和 jetty 进行集成测试 - dbunit 不填充表

go - 如何使用 go/analysis 为 Go checker 定义修复操作?

testing - WshShell 击键多媒体 Next Track 窗口

go - 在 Go 中解码为在运行时确定的结构数组

gorm 不支持的目标,应该是 slice 或结构

go - 为什么使用 Go interface{} 作为参数,当我用字符串调用 func 时,它会强制转换一个 alloc/ns?

json - 转换仅包含 1 个数组字段的 JSON

testing - 我如何重用测试的某些部分?