首页 > 解决方案 > 在 Symfony WebTestCase (PHPUnit) 的单个类中设置测试执行顺序

问题描述

我正在为 Symfony 中构建的 API 添加测试覆盖率。我有一个ApiControllerTest扩展 Symfony 的WebTestCase,并对 API 控制器的不同控制器操作执行测试。请注意,这些是功能测试,因此它们正在调用控制器路由并保存到数据库中。

我希望测试以特定顺序运行。例如,有一些 API 方法可以保存项目、将该项目与另一个项目匹配、向该项目添加需求、删除该项目等。我知道单元测试不应该相互依赖,但功能测试似乎可以。与在每次测试之前和之后手动添加/删除项目的方法不同,在第一次测试中保存项目,然后为该项目更新、删除等后续测试会更有效.

我查看了以特定顺序运行 PHPUnit 测试并尝试使用@depends注释,但这不起作用(我不是试图将一个测试的结果传递给另一个)。另外,我看到您可以指定单独类的运行顺序,但似乎这些测试都是相关的并且属于一个类,因为它们正在测试一个控制器(我通常每个控制器都有一个测试类我正在测试的类、服务类等)

有没有办法使用 PHPUnit 或 SymfonyWebTestCase来指定特定类中的测试应该运行的顺序?或者我离这里的设计模式还有一段距离,需要使用不同的方法?

标签: phpsymfonyphpunitfunctional-testing

解决方案


即使您考虑过但没有那样做,@depends也是您所需要的。它不仅用于传递值,还用于您的确切需求。

此外,即使测试是功能性的,因此您不会在测试之间传递对象或数据,返回值对于传递在前一个测试中创建的实体的 ID 很有用,以便在下一个测试中加载它。


推荐阅读