当前位置: 首页 > 面试题库 >

数据库单元测试

艾令秋
2023-03-14
问题内容

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

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

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

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

}

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

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

任何建议都很好。

谢谢!


问题答案:

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

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

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



 类似资料:
  • 问题内容: 是否可以在不设置数据库的情况下编写Django单元测试?我想测试不需要设置数据库的业务逻辑。尽管设置数据库的速度很快,但在某些情况下我真的不需要它。 问题答案: 你可以继承DjangoTestSuiteRunner的子类,并覆盖setup_databases和teardown_databases方法以进行传递。 创建一个新的设置文件,并将TEST_RUNNER设置为刚创建的新类。然后,

  • 由于一个人在单元测试和模拟之前没有经验,我使用Mockito学习了关于JUnit的初学者教程,并进行了一些实践。 现在,我需要对一些在MySQL数据库上执行基本数据库操作的类方法进行单元测试。我不想对数据库进行真正的更改。 在不访问真实数据库的情况下,是否存在验证类似方法的方法?还是我误解了单元测试和嘲笑的概念?

  • 所以我用了这个嵌入Kafka的例子,还有这个 我对这个示例做了一点更改,并用一些数据库(如h2db)更新了kafka侦听器。 现在在我的单元测试中,当我想检查数据在数据库中是否可用时,我得到NULL。另外,我不确定如何手动检查数据库,因为h2是一个内存基础数据库。 这是更新的部分:在接收器类中 在单元测试中: 但 dt 始终为空。此外,我也无法检查数据库,因为它在测试停止后停止。有人知道如何使它可

  • 在我的项目中,我在进行单元测试时遇到了问题。一个问题是,仅仅进行联调就可以更快地编写,并且还可以测试组件是否真正协同工作。单元测试新颖的“算法”之类的似乎要容易得多。单元测试服务类感觉是错误和无用的。 我使用mockito来模拟spring数据存储库(以及DB访问)。问题是,如果我告诉模拟存储库在方法调用getById时返回实体A,它显然会返回实体A,服务也会返回实体A。是的,该服务做了一些额外的

  • 问题内容: 我开始采用TDD开发态度,并为django应用程序编写单元测试。我知道固定装置,并且知道应该执行测试的方式,但是对于给定的测试,我确实需要在整个数据库上执行它,而我想处理的10百万以上行数据库的json固定装置,此外,此测试是“只读”的。 因此,问题是如何设置测试套件以在生产数据库上运行?我想这就像在某些测试的setUp方法中添加DATABASE_NAME设置一样容易。但是运行测试时,