因为 PHPUnit 是从 xUnit 派生的,而 xUnit 就是这样做的。
为什么 xUnit 会那样做?我很高兴你问。正如 Robert 指出的那样,最初的原因是 xUnit 来自 Smalltalk,并被 Java 中的 JUnit 推广。两者都是 OO-or-nothing 语言,所以他们别无选择。
这并不是说没有其他优势。OO 测试可以被继承。这意味着如果你想测试一个子类,你可以运行所有父类的测试,并为你改变的行为覆盖少数测试方法。这为您提供了出色的子类覆盖率,而无需复制测试代码。
它很容易在 PHPUnit 中添加和覆盖断言方法。只需子类PHPUnit_Framework_TestCase
,编写您自己的assert
方法并让您的测试类从您的新子类继承。您还可以编写默认值setup
和teardown
方法。
最后,它保证测试框架的方法不会与他们正在测试的东西发生冲突。如果测试框架只是将其功能转储到测试中,并且您想测试具有setup
方法的东西……那么您就有麻烦了。
也就是说,我听到了你的痛苦。一个大的测试框架可能是烦人的、麻烦的和脆弱的。Perl 不使用 xUnit 样式,它使用带有简短测试函数名称的过程样式。有关示例,请参见测试::更多。在幕后它只是按照您的建议进行操作,有一个所有函数都使用的单例测试实例对象。还有一个混合过程断言函数与称为Test::Class的 OO 测试方法模块,它做到了两全其美。
考虑到 PHP 的语法对于调用方法来说是如此丑陋
我猜你不喜欢->
. 我建议你学会忍受它。OO PHP 比替代方案好得多。