Unit testing 如何在不修改数据库的情况下运行集成测试?

Unit testing 如何在不修改数据库的情况下运行集成测试?,unit-testing,testing,mocha.js,tdd,integration-testing,Unit Testing,Testing,Mocha.js,Tdd,Integration Testing,我正在为一个应用程序做一些集成测试,测试修改数据库的路由。到目前为止,我已经在测试中添加了一些代码来删除我对DB所做的所有更改,因为我不想更改它,但这会增加很多工作,而且听起来不太正确。然后我考虑在我的测试脚本中复制数据库、测试、删除数据库。问题是这样做太长了。有没有办法做到这一点 我认为有两种可能的方法可以解决您的问题: 内存数据库,例如(h2) docker容器中的数据库 这两种方法都可以解决您的问题,您只需关闭db/container并再次运行它,在这种情况下,db将是干净的,您不必关

我正在为一个应用程序做一些集成测试,测试修改数据库的路由。到目前为止,我已经在测试中添加了一些代码来删除我对DB所做的所有更改,因为我不想更改它,但这会增加很多工作,而且听起来不太正确。然后我考虑在我的测试脚本中复制数据库、测试、删除数据库。问题是这样做太长了。有没有办法做到这一点

我认为有两种可能的方法可以解决您的问题:

  • 内存数据库,例如(h2)
  • docker容器中的数据库
这两种方法都可以解决您的问题,您只需关闭db/container并再次运行它,在这种情况下,db将是干净的,您不必关心它。运行新的。但也有一些特点:

内存中的命令更易于实现和使用,但可能存在方言问题,例如,某些oracle sql命令不适用于H2。最终,您将在不同的数据库上运行测试


带有db的Docker容器很难插入到您的构建和测试中,但它没有嵌入带有方言的db问题,Docker中的db与您的真实db相同。

我看到两种可能的方法来解决您的问题:

  • 内存数据库,例如(h2)
  • docker容器中的数据库
这两种方法都可以解决您的问题,您只需关闭db/container并再次运行它,在这种情况下,db将是干净的,您不必关心它。运行新的。但也有一些特点:

内存中的命令更易于实现和使用,但可能存在方言问题,例如,某些oracle sql命令不适用于H2。最终,您将在不同的数据库上运行测试


带有db的Docker容器很难插入到您的构建和测试中,但它没有嵌入方言的db问题,Docker中的db与您的真实db相同。

您可以在测试开始时启动数据库事务,然后回滚它。有关详细信息,请参阅以下帖子:
您可以在测试开始时启动数据库事务,然后将其回滚。有关详细信息,请参阅以下帖子: