Golang数据库单元测试

时间:2018-07-10 19:47:22

标签: unit-testing go

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

如果没有找到记录,则我正在测试的功能会将数据库作为种子。

func Seed(db *gorm.DB) {
    var data []Data
    db.Find(&data)

    if len(data) == 0 {
      // do seed default data
    }

}

如果len测试,我似乎不太可能进行测试。我正在使用一个测试数据库,因此我可以在任何时候都对其进行核对,因此,如果我只需要在该函数上强制使用一个空的数据库,就没有问题。

该函数本身可以正常工作,我只想确保已将其覆盖。

任何建议都会很棒。

谢谢!

1 个答案:

答案 0 :(得分:1)

这真的取决于,有很多方法可以根据您的风险水平和您想要投资来减轻这些风险的时间来解决这个问题。

  • 您可以编写一个单元测试,声明您无需任何数据库就可以检测用户逻辑并采取行动(例如,在空时播种,在满时忽略)。
  • 如果您想测试逻辑和程序通过gorm库与mysql正确对话的能力,则可以:
    • 有一个测试,您可以在数据库中没有用户的情况下调用Seed,在调用该测试后,您可以从Users中进行选择,并确保有条件地从len(users) == 0创建了预期的条目
    • 进行测试,该测试将创建一个条目并调用Seed,然后断言基础表为空。

它会变得更加复杂。如果Seed选择的是数据子集,则您的测试可能会插入2个用户,一个合格,两个不合格,并确保没有Seed个新用户。