我希望就我正在编写的用于测试某些数据库条目的单元测试获得一些建议。
如果没有找到记录,我正在测试的函数会为数据库播种。
func Seed(db *gorm.DB) {
var data []Data
db.Find(&data)
if len(data) == 0 {
// do seed default data
}
}
我似乎不太了解的是对 if len 测试的测试。我正在使用一个测试数据库,所以我可以随时核对它,所以如果我只需要在函数上强制一个空数据库,这不是问题。
该功能本身有效,我只是想确保我能做到这一点。
任何建议都会很棒。
谢谢!
最佳答案
这真的取决于,有很多方法可以根据您的风险水平和您希望投入多少时间来减轻这些风险来解决这个问题。
- 您可以编写一个单元测试,断言您能够在没有任何数据库的情况下检测用户逻辑并根据用户逻辑采取行动(即,在空时播种,在满时忽略)。
- 如果您想测试逻辑以及您的程序通过
gorm
库正确与 mysql 对话的能力,您可以:- 在数据库中没有用户的情况下调用
Seed
进行测试,在调用它之后,您的测试可以从Users
中进行选择,并确保从中创建了预期的条目len(users) == 0
有条件的 - 进行测试,其中测试创建单个条目并调用
Seed
,之后断言基础表为空。
- 在数据库中没有用户的情况下调用
它会变得更复杂。如果 Seed
选择的是数据子集,那么您的测试可能会插入 2 个用户,一个符合条件,一个不符合条件,并确保没有新用户被 Seed
编辑。
关于unit-testing - 数据库单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51272973/