如何在使用 PHPUnit 测试插入数据后从数据库中删除?

How to delete from database after tests insert data using PHPUnit?

我想删除通过测试创建的每个新条目,以便可以再次 运行 它(在 CI 构建中或手动)而无需手动删除数据库使用之前的 运行 测试创建的条目。我找到了 tearDown()tearDownAfterClass() 但它似乎只对 connecting/disconnecting 和 link 与数据库有用。我可以用它来删除测试的条目吗?

是的,您可以通过您提到的方法来完成。

  • tearDown 方法在 class
  • 中的每个测试后启用
  • tearDownAfterClass 方法在 class
  • 内的所有测试结束时启用

我建议你使用回滚模式,所以

  • setUp 方法中您将初始化事务
    protected function setUp(): void
    {
        //...some boilerplate with establish connection
        $this->connection->beginTransaction();
    }
  • tearDown 方法中,您将回滚在测试中所做的更改
    protected function tearDown(): void
    {
        $this->connection->rollback();
    }

I want to delete every new entry made with the tests in order to make it possible to run it again (both on the CI build or manually) without having to manually delete the database entries made with the previous run of the tests.

在设置中创建数据库的联机快照,在拆卸中将其重置为快照点。

无论您的测试对数据库中的数据或其结构做了什么,它都不是测试前 运行 快照的一部分,因此已经消失。

请向您的 DBA 咨询有关正在使用的数据库系统的选项,您可能还想引入系统管理员,因为这可能最容易通过文件系统的快照功能完成并且您有兴趣将这一切与您的测试套件集成。