【发布时间】:2015-01-19 00:43:51
【问题描述】:
我有一个包含一些具体和抽象受保护方法的抽象类,并且我对这个抽象类进行了 PHPUnit 测试。
然后我有扩展抽象类并实现抽象受保护方法的类。
我很好奇测试子类是否返回他们需要从其他抽象的受保护方法返回的最聪明的方法。
我读过很多关于你不应该测试私有/受保护方法的文章,但我觉得这很尴尬,因为要获得整个受保护方法的代码覆盖率,我必须从抽象类测试中复制许多测试,这涉及生成许多模拟对象并设置它们的方法以返回特定值。
最终结果将是大量与其他类紧密耦合的测试。如果我更改了一个类,则对类的测试需要更改(完全可以),然后该类的无数模拟实现也需要更改。
归根结底,如果抽象类有效,那么我知道我的子对象也会有效,只要它的抽象受保护方法的实现返回预期值。
所以我想知道我是否忽略了一个模式。
在每个子类中重复测试似乎并不比测试子类是否正确实现了它们的接口更好。
【问题讨论】:
-
我已经按照您的建议做了,实际上将测试移到了可以包含/需要到我的测试中的通用代码中。出于您提到的相同原因,我测试了抽象类。我只是做了相同的测试提取,而不必复制进行测试的代码。只需 REQUIRE() 包含测试的 PHP 文件,然后调用它们。
-
那是建议。我从没想过拆分可重用的测试。我认为这可能是最明智的做法。
标签: unit-testing phpunit abstract-class