随着运行完整 PHPUnit 套件所需时间的增加,我们的团队开始怀疑是否有可能并行运行单元测试。最近我读到一篇关于 Paraunit 的文章,Sebastian Bergman 也写过,他将在 PHPUnit 3.7 中添加并行性。
但是集成测试,或者更一般地说,与数据库交互的测试仍然存在问题。为了保持一致性,必须在每次测试后重置 testDB 并加载固定装置。但是在并行测试中存在竞争条件的问题,因为所有进程都使用相同的 DB。
因此,为了能够并行运行集成测试,我们必须为每个进程分配自己的数据库。我想问一下,如果有人对如何解决这个问题有一些想法。也许在另一个 xUnit 实现中已经实现了解决这个问题的方法。
在我的团队中,我们正在使用 MongoDB,因此一种解决方案是以编程方式为每个 PHPUnit 进程创建一个配置文件,并使用生成的数据库名称(为此进程),并且在setUp()
方法中我们可以将主 TestDb 克隆到这个临时文件中。但在我们开始实施这种方法之前,我想询问您对该主题的想法。