一尘不染

数据库单元测试

go

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

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

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

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

}

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

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

任何建议都很好。

谢谢!


阅读 274

收藏
2020-07-02

共1个答案

一尘不染

确实取决于您,有很多方法可以根据您的风险水平以及您为减少这些风险而投入的时间来解决此问题。

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

它会变得更加复杂。如果Seed选择的是数据子集,则您的测试可能会插入2个用户,其中1个符合条件,1个不符合条件,并确保没有新用户被Seed编辑。

2020-07-02