unit-testing - 数据库单元测试

标签 unit-testing go

我希望就我正在编写的用于测试某些数据库条目的单元测试获得一些建议。

如果没有找到记录,我正在测试的函数会为数据库播种。

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/

相关文章:

angular - Http错误响应: Http failure response for api url jasmine test

http - 将 CURL 转换为 Golang 代码

c - golang中等效的结构数组

javascript - 不识别 spy 的 Jest 被称为

c# - 系统.ArgumentNullException : Value cannot be null

unit-testing - 如何运行 'go test' 并包含单元测试文件但排除其他测试文件

http - Golang 发送 http 请求发送两次而不是一次

go - 使用for循环遍历 channel 时出现Goroutine死锁

javascript - 模拟作为参数传递给对象的回调

php - 如何表明 PHPUnit 测试预计会失败?