go 建议:测试:允许使用测试框架示例,T/B/F表示测试框架示例是否可用,

fxnxkyjh  于 3个月前  发布在  Go
关注(0)|答案(3)|浏览(47)

建议详情

今天,示例通常作为带有godoc的"func main()"出现,如图所示。它们可以像那样可执行。我正在尝试为我创建的测试框架(https://github.com/hugelgupf/vmtest)编写示例,该框架需要使用testing.TB。要在pkg.go.dev中创建可执行示例,示例必须能够接受testing.T或testing.B作为参数。
我认为现有的示例“API”应该保持不变。但是,如果给定一个带有testing.T/B/F参数的示例,它应该被假定需要它,并在文档中以这种方式呈现,例如:

func ExampleFunctionname(t *testing.T) {
  t.Logf("foobar")
  // Output: foobar
}

应该像这样出现在文档中,与Functionname一起作为可执行代码片段:

package main_test

import (
  "testing"

  "packagepath"
)

func TestExample(t *testing.T) {
    t.Logf("foobar")
}
zvokhttg

zvokhttg1#

我编写了一个测试框架,遇到了同样的问题。我通常使用基于示例的驱动开发,但对于测试框架来说,这有点困难。我不得不创建一个虚拟的testing.TB,它并不总是工作得很好。例如,testing.TB没有T.Run,所以我只是用可以编译但不会执行的代码来替代它。

1szpjjfi

1szpjjfi2#

这似乎是一个特殊的目的。示例不必有输出。我们是否也应该允许示例函数接受一个 slog.Logger 参数?似乎很难知道何时停止。

ttcibm8c

ttcibm8c3#

我认为建议应该是让测试更容易进行。T/B/F用于测试目的。因此代码看起来像这样:

func ExampleWhatever() {
    result := testing.RunTest(func(t *testing.T) {
        // do stuff with *testing.T
    })
    fmt.Println("Test failed was", result.Failed, "because", result.Output)
    // Output: 
    // Test failed was true because error: bad potatoes
}

这也可以在TestFunction中使用,以更轻松地测试测试框架。

相关问题