1

对于测试,使用 @depends 可以使测试方法依赖于另一个测试方法,这样,如果第一个测试失败,依赖它的测试将被忽略,有没有办法用测试类做到这一点

例如,假设我有一个页面要测试其布局,检查图像是否显示,如果链接正确,这将是一个测试类,在这个页面上是一个表单的链接,对于那个页面我会创建一个新的测试类检查它的布局,验证等。

我想尝试的是,如果第一个测试类的任何测试失败,那么第二个应该被跳过,因为第一页应该是正确的,因为它将是用户在进入第一个之前看到的页面(除非他们输入第二页的网址,但必须假设用户很愚蠢,因此不知道地址栏是如何工作的)

我还应该注意,所有测试都是使用 TFS 存储的,因此虽然团队将进行相同的测试,但我们可能有不同的 phpunit.xml 文件(一个人显然使用 php.xml.dist 并且不会改变它,因为它被提到过一次在 Magento TAF 中,即使我使用 .xml 并且没有问题),因此,尝试在 phpunit.xml 中强制执行命令不会那么有用(在 .xml 中强制执行命令也不会执行此依赖项)

4

2 回答 2

3

仅仅因为我们可以做一件事,并不意味着我们应该做。 让测试依赖于其他测试的成功执行是一个坏主意。每一篇关于测试的体面文字都会告诉你这一点。听他们说。

于 2013-02-20T22:59:23.333 回答
1

我不认为 phpUnit 有办法让一个测试类依赖于另一个。(我开始写下一些让我想起的黑客,但它们是如此丑陋和脆弱,我再次删除了它们。)

我认为最好的方法是为所有功能测试提供一大类。然后你可以根据需要使用@depends。<-- 这就是我对您的实际问题的回答结束的地方:-)

在您对罗斯回答的评论中,您说:“我被告知,如果您在一个班级中有大量(测试)方法,那么您应该将其分成单独的班级”要了解为什么我们被允许违反此规则,您必须深入了解为什么这通常是一个好主意:一个类中的大量代码表明该类做得太多,使其更难更改,更难测试。因此,您使用提取类重构将类拆分为更精细的功能。但绝不是机械地:每个类仍然应该是对某事物的一个好的、干净的抽象。

在单元测试中,最好将类视为将相关测试收集在一起的一种方式。当一个测试依赖于另一个测试时,显然它们是相关的,因此它们应该属于同一类。

如果一个 2000 行的文件让您不满意,您可以做并且应该做的一件事是提取父类。所有辅助函数和自定义断言都进入您的父类。您将把所有实际测试留在派生类中,但仔细检查每个测试,看看哪些常见功能可以移动到共享函数中,然后将该共享函数放入父类中。

回应罗斯的@depends邪恶建议,我更愿意将其视为帮助您找到理想主义和现实世界约束之间的平衡。在理想的世界中,您希望所有测试都完全独立。这意味着每个测试都需要自己创建和拆除夹具。如果使用数据库,它应该创建自己的数据库(一个唯一的名称,因此将来它们可以并行运行),然后创建表,用数据填充它们等。(使用父类中的辅助函数分享这个通用的夹具代码。)

另一方面,我们希望我们的测试在 100 毫秒内完成,这样它们就不会中断我们的创作流程。夹具共享有助于加快测试速度,但代价是消除了独立性。

对于网站的功能测试,我建议将@depends其用于登录等显而易见的事情。如果您的大多数测试将首先登录到该站点,那么创建 loginTest() 并让所有其他测试 @depend 依赖于它是很有意义的。如果登录不起作用,您肯定知道所有其他测试都将失败......并且在此过程中浪费了大量最有价值的程序员资源。

当它不是那么明确时,我会在理想主义方面犯错,如果需要,稍后再回来优化。

于 2013-02-22T00:21:48.837 回答