Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么PHPUnit坚持用面向对象的方式做事?_Php_Oop_Phpunit - Fatal编程技术网

为什么PHPUnit坚持用面向对象的方式做事?

为什么PHPUnit坚持用面向对象的方式做事?,php,oop,phpunit,Php,Oop,Phpunit,冒着被点燃的危险。。。在上下文是隐式的上下文中,强制调用方法而不是函数有什么好处 考虑到PHP的语法对于调用方法来说是如此丑陋,为什么PHPUnit的创建者会强制使用它呢 如果框架设置了一个全局“currentTestCase”对象,然后透明地将失败的断言与该对象关联,那么我们可以编写: assertEquals("blah", $text); 与等效但冗长的内容相反: $this->assertEquals("blah", $text); 在这种情况下,我们使用OO到底能得到什么 请

冒着被点燃的危险。。。在上下文是隐式的上下文中,强制调用方法而不是函数有什么好处

考虑到PHP的语法对于调用方法来说是如此丑陋,为什么PHPUnit的创建者会强制使用它呢

如果框架设置了一个全局“currentTestCase”对象,然后透明地将失败的断言与该对象关联,那么我们可以编写:

assertEquals("blah", $text);
与等效但冗长的内容相反:

$this->assertEquals("blah", $text);
在这种情况下,我们使用OO到底能得到什么


请告诉我。

一个很好的理由是,
assertXXX
作为一个方法名,有很高的命名冲突风险


另一个原因是它源于xUnit家族,该家族最初通常处理面向对象的语言——Smalltalk。这使得您更容易与来自Java和Ruby的“兄弟姐妹”联系起来。

一个很好的原因是,
assertXXX
作为方法名有很高的命名冲突风险


另一个原因是它源于xUnit家族,该家族最初通常处理面向对象的语言——Smalltalk。这使得您更容易与来自Java和Ruby的“兄弟姐妹”联系起来。

因为PHPUnit是从xUnit派生的,这就是它的工作原理

为什么xUnit会这样做?我很高兴你问。正如Robert指出的,最初的原因是xUnit来自Smalltalk,并由JUnit在Java中推广。这两种语言都是OO或nothing语言,因此它们别无选择

这并不是说没有其他优势。OO测试可以被继承。这意味着如果你想测试一个子类,你可以运行所有父类的测试,只需覆盖你所改变行为的少数测试方法。这为您提供了极好的子类覆盖率,而无需重复测试代码

在PHPUnit中添加和重写断言方法很容易。只需子类
PHPUnit\u Framework\u TestCase
,编写自己的
assert
方法,并让您的测试类从新的子类继承。您还可以编写默认的
setup
teardown
方法

最后,它保证了测试框架的方法不会与他们正在测试的东西发生冲突。如果测试框架只是将其功能转储到测试中,而您想要测试具有
设置
方法的东西。。。你有麻烦了

也就是说,我听到了你的痛苦。一个大的测试框架可能会很烦人、麻烦和脆弱。Perl不使用xUnit样式,它使用带有短测试函数名的过程样式。有关示例,请参见。在幕后,它只是按照您的建议进行的,有一个所有函数都使用的单例测试实例对象。还有一个混合的过程断言函数和OO测试方法模块,名为,它充分利用了这两个方面

考虑到PHP的语法对于调用方法来说太难看了


我猜你不喜欢
->
。我建议你学会接受它。OO PHP比另一种要好得多。

因为PHPUnit是从xUnit派生的,这就是它的工作原理

为什么xUnit会这样做?我很高兴你问。正如Robert指出的,最初的原因是xUnit来自Smalltalk,并由JUnit在Java中推广。这两种语言都是OO或nothing语言,因此它们别无选择

这并不是说没有其他优势。OO测试可以被继承。这意味着如果你想测试一个子类,你可以运行所有父类的测试,只需覆盖你所改变行为的少数测试方法。这为您提供了极好的子类覆盖率,而无需重复测试代码

在PHPUnit中添加和重写断言方法很容易。只需子类
PHPUnit\u Framework\u TestCase
,编写自己的
assert
方法,并让您的测试类从新的子类继承。您还可以编写默认的
setup
teardown
方法

最后,它保证了测试框架的方法不会与他们正在测试的东西发生冲突。如果测试框架只是将其功能转储到测试中,而您想要测试具有
设置
方法的东西。。。你有麻烦了

也就是说,我听到了你的痛苦。一个大的测试框架可能会很烦人、麻烦和脆弱。Perl不使用xUnit样式,它使用带有短测试函数名的过程样式。有关示例,请参见。在幕后,它只是按照您的建议进行的,有一个所有函数都使用的单例测试实例对象。还有一个混合的过程断言函数和OO测试方法模块,名为,它充分利用了这两个方面

考虑到PHP的语法对于调用方法来说太难看了


我猜你不喜欢
->
。我建议你学会接受它。OO PHP比其他方法好得多。

将测试用例放在类方法中可以节省PHPUnit的工作。由于缺乏内置智能,PHPUnit无法找到或处理纯测试函数。只需识别->assert*()消息(在一个简单的布尔链中)就可以再次保存处理逻辑(对于PHPUnit,而不是测试用例作者)。从PHPUnit/SimpleTest的角度来看,节省开销的都是语法盐


捕获错误/警告消息、异常或识别PHPs native assert()语句并不是技术问题。之所以没有这样做,是因为困难的API看起来更具企业精神。

将测试用例放在类方法中可以节省PHPUnit的工作。由于缺乏内置智能,PHPUnit无法找到或处理纯测试函数。只需识别->assert*()消息(在一个简单的布尔链中)就可以再次保存处理逻辑(对于PHPUnit,而不是测试用例作者)。这是所有语法盐,节省了开销从P
require_once 'PHPUnit/Framework/Assert/Functions.php';
assertEquals('foo', $bar);