type
status
date
slug
summary
tags
category
icon
password
Testify - 你应当编写测试
ℹ️ 我们正在开发 testify v2,并且非常希望听到你们希望在其中看到什么功能,请在此发表你的意见:https://cutt.ly/testify
构建状态 Go 报告卡 PkgGoDev
Go 代码(golang)提供了一组用于证明你的代码将按照你预期的行为进行操作的工具包。
功能包括:
- 简单的断言
- 模拟
- 测试套件接口和函数
入门:
使用一行代码安装 testify,或使用另一行代码更新它。
有关在 Go 中编写测试代码的介绍,请查看 https://go.dev/doc/code#Testing。
使用 testifylint(通过 golanci-lint)避免常见错误。
测试驱动开发(TDD):一种软件开发方法,先编写测试代码,然后编写满足测试要求的代码,最后重构代码以提高代码质量。
有关测试驱动开发(TDD)的简要介绍
断言(Assertion):在测试中用于验证代码行为是否符合预期的一系列检查,如果检查失败则测试报错。
断言包
断言包提供了一些有用的方法,使你能够编写更好的 Go 测试代码。
- 打印友好、易读的错误描述
- 允许非常易读的代码
- 可选择地为每个断言添加消息
应用实例:
每个断言函数都以 testing.T 对象作为第一个参数。这是它通过正常的 go test 功能输出错误的方式。
每个断言函数返回一个布尔值,表示断言是否成功。如果你想要继续进行更多的断言,这是很有用的。
如果你多次断言,请使用以下代码:
require 包
require 包提供了与断言包相同的全局函数,但它们不返回布尔结果,而是终止当前测试。这些函数必须从运行测试或基准测试功能的 goroutine 调用,而不是在测试期间创建的其他 goroutines。否则可能会出现竞争条件。
有关详细信息,请查看 t.FailNow。
模拟(Mocking):模拟对象是指在测试过程中创建的,用于替代真实对象的假对象。通过模拟对象可以控制测试环境,使测试更加灵活和可控。
模拟包
模拟包提供了一种轻松编写模拟对象的机制,这些对象可以在编写测试代码时替代真实对象。
一个测试函数的示例,测试依赖于外部对象 testObj 的代码片段,可以设置期望(testify)并断言它们确实发生了:
有关编写模拟代码的更多信息,请查看模拟包的 API 文档。
你还可以使用 mockery 工具根据接口自动生成模拟代码,从而使使用模拟变得更加快速。
测试套件(Test Suite):测试套件是一组相关测试的集合,可以包含多个测试函数和一些共享的设置/清理方法。
套件包
套件包提供了你可能会在更常见的面向对象语言中使用的功能。使用它,你可以将测试套件构建为结构体,在结构体上构建 setup/teardown 方法和测试方法,并通过 'go test' 正常运行它们。
下面展示了一个示例套件:
有关套件包提供的所有功能的更完整示例,请查看我们的示例测试套件。
有关编写套件的更多信息,请查看套件包的 API 文档。
套件对象具有断言方法:
安装
要安装 Testify,请使用 go get:
这将使以下包可用于你的代码:
github.com/stretchr/testify/assert
github.com/stretchr/testify/require
github.com/stretchr/testify/mock
github.com/stretchr/testify/suite
github.com/stretchr/testify/http
(已弃用)
使用以下模板将 testify/assert 包导入你的代码:
保持更新
要将 Testify 更新到最新版本,请使用 go get -u github.com/stretchr/testify。
支持的 Go 版本
我们目前支持从 1.19 开始的最新主要 Go 版本。
贡献
请随时提交问题、分叉仓库并发送拉取请求!
在提交问题时,我们要求你包括一个完整的测试函数,以演示问题。对于使用 Testify 编写演示问题的测试代码的人,我们将给予额外的奖励。
我们使用代码生成。在某些文件的顶部寻找 "Code generated with"。运行 go generate ./... 以更新生成的文件。
我们还在 Gophers Slack 群组的 #testify 和 #testify-dev 频道上进行讨论。
许可证
本项目根据 MIT 许可证的条款获得许可。
QA对
Q:Testify是什么?
A:Testify是一个Go语言的测试框架,提供了一系列工具来帮助开发者编写测试代码,包括断言、模拟和测试套件接口等。
Q:如何安装Testify?
A:可以通过执行"go get github.com/stretchr/testify"命令来安装Testify。
Q:Testify的模拟包有什么作用?
A:模拟包提供了一种机制,可以轻松编写模拟对象,这些对象可以在测试代码中替代真实对象,方便进行单元测试。
Q:Testify的assert包和require包有什么区别?
A:assert包提供了一组断言方法,用于检查测试结果是否符合预期,并返回布尔值表示断言是否成功。require包提供了类似的函数,但如果断言失败则立即终止测试,不返回布尔值。
Q:如何在Go中编写测试代码?
A:可以参考Go官方文档(<https://go.dev/doc/code#Testing)来学习如何在Go中编写测试代码。>
- 作者:Doiiars
- 链接:http://doiiars.com/article/testify-go-testing-framework
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章