在phpunit中进行一些测试之前重新加载数据库

问题描述

我目前正在使用PHPunit和symfony 5开发单元测试。 在使用behat的先前工作中,我们仅能为具有特定标签的测试重新加载数据库。我想做类似的事情。我知道有setUp()方法和@before批注,但是它们不允许我为某些测试而不是其他测试做事情...

理想情况下,我想有一个@reloadBase注释来放置以此为目标的测试方法,该方法将绑定到reloadBase()方法或类似方法;或至少类似的东西,但到目前为止,我还没有想办法。

我猜有可能将这些测试放在一个单独的文件中,该文件可以使用setUp方法这样做,但这不是那么好,我想保留当前的文件组织...

有什么想法吗?谢谢

解决方法

这里有两个想法:

特质/基础类
使用执行所有重载工作的方法创建特征或公共基类。使用特征或扩展基类,然后仅在需要重新加载的方法中调用它。

扩展
实施extension。每个测试将使用由类和方法名称组成的字符串来调用BeforeTestHook。您可以使用注释阅读器(例如Doctrine's)或使用reflection自己解析doc块,以检查该方法是否存在@reloadBase注释。