【问题标题】:How to write example tests in Go?如何在 Go 中编写示例测试?
【发布时间】:2023-02-06 22:16:46
【问题描述】:

我正在编写一个测试框架,并希望在我的文档中添加示例。为了可维护性,我想对这些示例进行测试,但我不知道如何进行。

理想情况下,我想要一个经过测试的示例,如下所示:

func TestFoo(t *testing.T) {
    f := mytestframework.FromT(t)
    // code using f
}

将上面的 sn-p 包装在 func ExampleFoo() { } 中不起作用,因为不能嵌套函数定义(这是语法错误)。

我试过将它放在一个单独的example_test.go 文件中,但是根据 go.dev 博客,在整个文件示例中(强调我自己的),godoc 会将其误认为是测试文件:

一个完整的文件示例是一个以 _test.go 结尾并只包含一个示例函数的文件,没有测试或基准功能,和至少一个其他包级声明。

我查看了 Go 的 doc 包的文档,但我不知道这对我是否有用。

我可以将示例作为降价代码块粘贴到文档中的某个地方,但是这样就不会对其进行测试并且将来可能会悄悄过时。

有没有办法测试示例测试,或者至少进行类型检查?

【问题讨论】:

    标签: go testing godoc


    【解决方案1】:

    只需使用 ExampleXXX 函数创建一个测试文件:

    package example_test
    
    import "fmt"
    
    func ExampleCount() {
        for i := 0; i < 3; i++ {
            fmt.Println(i)
        }
        // Output:
        // 0
        // 1
        // 2
    }
    

    go test 还将确保示例函数正确运行并且任何提供的“输出”完全匹配:

    $ go test -v
    === RUN   ExampleCount
    --- PASS: ExampleCount (0.00s)
    PASS
    ok      examples    0.002s
    

    更多文档可以在 testing 包中找到。

    注意:testing 包未在示例函数中使用,因为它不应在生产代码中使用,并且它将不再是一个真实的示例。

    【讨论】:

      最近更新 更多