如何使用PHPUnit测试抽象类的具体方法?
我希望我必须创建某种对象作为测试的一部分。不过,我不知道这方面的最佳实践,也不知道PHPUnit是否允许这样做。
发布于 2018-02-20 23:47:02
需要注意的是,从PHP7开始,已经添加了对anonymous classes的支持。这为您提供了一种为抽象类设置测试的额外途径,这种方法不依赖于特定于PHPUnit的功能。
class AbstractClassTest extends \PHPUnit_Framework_TestCase
{
/**
* @var AbstractClass
*/
private $testedClass;
public function setUp()
{
$this->testedClass = new class extends AbstractClass {
protected function abstractMethod()
{
// Put a barebones implementation here
}
};
}
// Put your tests here
}
发布于 2011-02-14 07:46:55
这是个好问题。我也一直在找这个。
幸运的是,对于这种情况,PHPUnit已经有了getMockForAbstractClass()
方法,例如
protected function setUp()
{
$stub = $this->getMockForAbstractClass('Some_Abstract_Class');
$this->_object = $stub;
}
重要信息:
请注意,这需要PHPUnit > 3.5.4。在以前的版本中有a bug。
要升级到最新版本,请执行以下操作:
sudo pear channel-update pear.phpunit.de
sudo pear upgrade phpunit/PHPUnit
发布于 2008-11-12 18:48:11
Eran,您的方法应该可以工作,但它与在实际代码之前编写测试的趋势相反。
我建议在所讨论的抽象类的非抽象子类的期望功能上编写测试,然后编写抽象类和实现子类,最后运行测试。
显然,您的测试应该测试抽象类的已定义方法,但始终通过子类进行测试。
https://stackoverflow.com/questions/190295
复制相似问题