如何对PHP特性进行单元测试
我想知道是否有关于如何单元测试PHP特征的解决方案。
我知道我们可以测试一个正在使用这个特性的类。 但我想知道是否有更好的方法。
预先感谢您的任何建议:)
编辑
另一种方法是在测试课程中使用Trait,因为我要演示下面的内容。
但我并不那么热衷于这种方法,因为没有保证,在特征,类和PHPUnit_Framework_TestCase(在本例中)之间没有类似的方法名称:
这是一个示例特征:
trait IndexableTrait
{
/** @var int */
private $index;
/**
* @param $index
* @return $this
* @throw InvalidArgumentException
*/
public function setIndex($index)
{
if (false === filter_var($index, FILTER_VALIDATE_INT)) {
throw new InvalidArgumentException('$index must be integer.');
}
$this->index = $index;
return $this;
}
/**
* @return int|null
*/
public function getIndex()
{
return $this->index;
}
}
和它的测试:
class TheAboveTraitTest extends PHPUnit_Framework_TestCase
{
use TheAboveTrait;
public function test_indexSetterAndGetter()
{
$this->setIndex(123);
$this->assertEquals(123, $this->getIndex());
}
public function test_indexIntValidation()
{
$this->setExpectedException(Exception::class, '$index must be integer.');
$this->setIndex('bad index');
}
}
您可以使用类似于测试抽象类的具体方法来测试Trait。
PHPUnit有一个方法getMockForTrait,它将返回使用该特征的对象。 然后你可以测试特征函数。
以下是文档中的示例:
<?php
trait AbstractTrait
{
public function concreteMethod()
{
return $this->abstractMethod();
}
public abstract function abstractMethod();
}
class TraitClassTest extends PHPUnit_Framework_TestCase
{
public function testConcreteMethod()
{
$mock = $this->getMockForTrait('AbstractTrait');
$mock->expects($this->any())
->method('abstractMethod')
->will($this->returnValue(TRUE));
$this->assertTrue($mock->concreteMethod());
}
}
?>
链接地址: http://www.djcxy.com/p/69371.html