我不认为 phpUnit 有办法让一个测试类依赖于另一个。(我开始写下一些让我想起的黑客,但它们是如此丑陋和脆弱,我再次删除了它们。)
我认为最好的方法是为所有功能测试提供一大类。然后你可以根据需要使用@depends。<-- 这就是我对您的实际问题的回答结束的地方:-)
在您对罗斯回答的评论中,您说:“我被告知,如果您在一个班级中有大量(测试)方法,那么您应该将其分成单独的班级”要了解为什么我们被允许违反此规则,您必须深入了解为什么这通常是一个好主意:一个类中的大量代码表明该类做得太多,使其更难更改,更难测试。因此,您使用提取类重构将类拆分为更精细的功能。但绝不是机械地:每个类仍然应该是对某事物的一个好的、干净的抽象。
在单元测试中,最好将类视为将相关测试收集在一起的一种方式。当一个测试依赖于另一个测试时,显然它们是相关的,因此它们应该属于同一类。
如果一个 2000 行的文件让您不满意,您可以做并且应该做的一件事是提取父类。所有辅助函数和自定义断言都进入您的父类。您将把所有实际测试留在派生类中,但仔细检查每个测试,看看哪些常见功能可以移动到共享函数中,然后将该共享函数放入父类中。
回应罗斯的@depends邪恶建议,我更愿意将其视为帮助您找到理想主义和现实世界约束之间的平衡。在理想的世界中,您希望所有测试都完全独立。这意味着每个测试都需要自己创建和拆除夹具。如果使用数据库,它应该创建自己的数据库(一个唯一的名称,因此将来它们可以并行运行),然后创建表,用数据填充它们等。(使用父类中的辅助函数分享这个通用的夹具代码。)
另一方面,我们希望我们的测试在 100 毫秒内完成,这样它们就不会中断我们的创作流程。夹具共享有助于加快测试速度,但代价是消除了独立性。
对于网站的功能测试,我建议将@depends其用于登录等显而易见的事情。如果您的大多数测试将首先登录到该站点,那么创建 loginTest() 并让所有其他测试 @depend 依赖于它是很有意义的。如果登录不起作用,您肯定知道所有其他测试都将失败......并且在此过程中浪费了大量最有价值的程序员资源。
当它不是那么明确时,我会在理想主义方面犯错,如果需要,稍后再回来优化。