1

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

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

4

1 回答 1

3

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

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

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

于 2013-04-08T08:30:40.297 回答