测试依赖于存在的表

时间:2013-04-08 08:15:52

标签: database unit-testing testing tdd

单元测试是否可以假设存在数据库表?

例如,如果有一个UserStore类和关联的UserStoreTest测试类。假设这个类是系统的一部分,当安装时,该类具有表的“实例”,该类需要名为foo_users。那么UserStoreTest是否可以假设该表存在并使用它?似乎更好的是要求UserStoreTest类设置表本身而不依赖于系统的状态,这是相当全局的。前一种方法是否可以接受?

1 个答案:

答案 0 :(得分:3)

最好的方法可能是找出一种模拟数据库的方法,而不是真正连接到真正的数据库。维护数据库的模拟有一些开销,但有许多优点。

  • 与真实数据库交谈可能会使您的单元测试变得不必要地变慢,尤其是如果您“设置与数据库的连接然后为每个测试设置表”路径。
  • 我认为您已经意识到,您的单元测试可能最终取决于可能会对测试过程产生负面影响的易失性数据,因为它不受测试套件的控制。
  • 可以在无需访问数据库的计算机上运行单元测试。这意味着您的单元测试不会意外破坏数据库或类似的东西。
  • 可能还有其他一些原因

如果模拟您的数据库连接是不可行的,那么一个良好的中间地点可能是拥有一个与您的真实/生产数据库分开的测试数据库。这样,您可以避免担心将测试套件连接到真实数据库,同时保留对数据库的完全控制以进行测试。