如何对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

上一篇: How to unit test PHP traits

下一篇: PHP: dealing with traits with methods of same name