* testing.M 用法及细节
时间: 2023-08-02 10:08:52 浏览: 57
`testing.M` 是 Go 语言中的测试框架 `testing` 提供的一个类型,它代表一个测试的集合。通常情况下,我们会在一个或多个 Go 源文件中编写测试函数,这些函数会被自动识别并注册到 `testing` 框架中。当我们执行 `go test` 命令时,测试框架会根据注册的测试函数执行测试并输出测试结果。
`testing.M` 则提供了一种将多个测试函数组织为一个测试集合的方式。我们可以通过创建一个 `testing.M` 类型的实例,将多个测试函数添加到该实例中,从而形成一个完整的测试集合。这个测试集合可以被 `go test` 命令执行并输出测试结果。
实际上,`testing.M` 并不是一个必需的类型,我们完全可以只编写测试函数而不使用它。但是,如果我们需要组织大量的测试函数,或者需要在测试集合之间共享一些状态,那么使用 `testing.M` 可以更方便地实现这些需求。
下面是一个简单的示例,展示了如何使用 `testing.M`:
```go
package mytest
import (
"testing"
)
func TestFoo(t *testing.T) {
// 测试函数 1
}
func TestBar(t *testing.T) {
// 测试函数 2
}
func TestBaz(t *testing.T) {
// 测试函数 3
}
func TestMain(m *testing.M) {
// 创建一个测试集合,并将测试函数添加到其中
mytests := []testing.InternalTest{
{Name: "TestFoo", F: TestFoo},
{Name: "TestBar", F: TestBar},
{Name: "TestBaz", F: TestBaz},
}
// 执行测试集合
code := m.Run()
// 输出测试结果
os.Exit(code)
}
```
在上面的示例中,我们定义了三个测试函数 `TestFoo`、`TestBar` 和 `TestBaz`,它们分别测试不同的功能。然后,我们定义了一个 `TestMain` 函数,它接受一个 `testing.M` 类型的参数。在 `TestMain` 函数中,我们创建了一个测试集合,并将三个测试函数添加到其中。最后,我们执行了测试集合并输出测试结果。
需要注意的是,在使用 `testing.M` 时,我们需要将测试函数添加到一个 `testing.InternalTest` 类型的切片中,并将该切片作为参数传递给 `testing.M` 的构造函数。`testing.InternalTest` 类型包含了一个测试函数的名称和实现,我们需要手动将每个测试函数转换为 `testing.InternalTest` 类型。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![dll](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)