我正在编写一个测试框架,并希望将示例放入我的文档中.为了可维护性,我想测试这些示例,但我不知道如何测试.

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

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

将上述代码段包装在func ExampleFoo() { }中不起作用,因为函数定义不能嵌套(这是一个语法错误).

我试着把它放在一个单独的example_test.go文件中,然而godoc会把它误认为是测试文件,根据go.dev博客的说法,是关于整个文件的例子(强调我自己的):

一个完整的文件示例是一个以_test.go结尾的文件,它正好包含一个示例函数no test or benchmark functions,和至少一个其他包级声明.

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

我可以将该示例作为标记代码块粘贴到文档中的某个位置,但这样就不会进行测试,并且在将来可能会悄悄过时.

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

推荐答案

按照设计,testing包不支持使用*testing.T的可执行示例.目前,根据定义,整个文件示例不能包含Test*个函数.

最好的 Select 是将示例代码作为缩进块添加到包或函数文档中.这就是为什么testing package provides example documentation

// Using test framework:
//
//      func TestFoo(t *testing.T) {
//          framework(t)
//      }

另一种 Select 是使用Example个函数,并将测试函数声明为匿名函数

func ExampleTesting() {
    _ = func(t *testing.T) {
        framework(t)
    }
}

Go相关问答推荐

VS代码,Golang格式顽固的情况与switch / case

调用API时使用nginx作为反向代理时从nginx获取502坏网关

一次打印用户输入的字符串n次

如何模拟 stripe 需要 webhooks 的捕获事件?

Go Gin:验证 base64

这种合并排序的实现有什么问题?

如何在golang中使用viper获取对象的配置数组?

Golang prometheus:有没有办法衡量出站请求的指标?

GoLang: gocui 边框 colored颜色

设置 graphql 的最大文件上传大小(golang)

如何使用泛型将接口转换为指定类型

使用 Grafana alert 在几分钟内重复alert

无法使用 gocsv 读取引用字段

在 Gorm 的 AfterFind() 钩子中获取智能 Select struct 的值

如何在 golang revel 中获取动态应用程序配置

我相信我正确地在 sRGB 和线性 RGB 之间进行了转换,那么为什么深色的结果看起来更糟呢?

无法访问 Go 模块导入的远程存储库

合并几千万文件最快的方法是什么

分配空切片而不引用其类型?

golangci-lint 的 GitHub 操作失败,无法加载 fmt