go - 如何编写干净的集成测试
问题描述
我想使用 Go 和 MySQL 编写一个集成测试。但我很困惑如何做到这一点。我有 4 个函数:创建、获取、更新和删除。如果我只有一个测试函数来测试我的所有代码,这是一个好习惯吗?例如:
func TestCRUD(t *testing.T){
t.Run("success case", func(t *testing.T){
// call create func
// call update func
// call get func
// call delete func
})
}
如果我有上面的代码,我只有一个测试函数来测试我的所有代码。如果我想添加一个测试用例,我只是添加到TestCRUD()
函数中。这是一个好习惯吗?
或者我应该为每个 CRUD 函数编写测试函数?所以我有4个测试功能,每个测试功能也有很多测试用例。如何编写干净的集成测试?
解决方案
如果您考虑可维护性和干净的代码,恕我直言,我建议您在不同的测试中测试每个 CRUD 功能。
关于您关于多个测试用例的问题,我想说一个好的方法是使用 DDT(数据驱动测试或表驱动测试)。就像是:
func Test_create(t *testing.T) {
type args struct {
// Define here your function arguments
arg1 string,
arg2 string,
}
tests := []struct {
name string
args args
want bool // Your possible function output
}{
// TODO: Add test cases.
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := create(tt.args.id); got != tt.want {
t.Errorf("create() = %v, want %v", got, tt.want)
}
})
}
}
使用gotests,您可以为您的函数生成干净而漂亮的测试。
推荐阅读
- nativescript - 任务':app:checkDebugDuplicateClasses'的错误执行失败
- javascript - 使用 express js 获取 404 渲染视图 ejs
- c# - DrawString 方法重复一个字符串两次
- ios - FireStore 读取问题,限制读取将如何影响价格
- java - 如何在 Android 天气应用 API 调用中更改城市?
- c# - 无法使用 [] 将索引应用于“IOrderedEnumerable”类型的表达式
' - git - git clone 问题 [套接字:协议不支持地址族]
- bash - Bash 脚本中的 While 循环和 If 语句
- angular - 启动 Tomcat 时出现 Whitelabel 错误页面
- c++ - 未使用或包含的库上的 Visual Studio“致命错误 LNK1104:无法打开文件”