我想知道如何对一个PHP trait进行单元测试的解决方案。
我知道我们可以测试使用该trait的类,但我想知道是否有更好的方法。
提前感谢任何建议 :)
编辑
一种替代方案是在测试类中使用该Trait,就像我下面要演示的那样。
但是我并不喜欢这种方法,因为不能保证Trait、类和PHPUnit_Framework_TestCase
(在此示例中)之间没有相似的方法名:
这里是一个示例Trait:
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');
}
}