Подтвердить что ты не робот

Как unit test Свойства 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');
    }
}
4b9b3361

Ответ 1

Вы можете протестировать 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());
    }
}
?>