Как написать PHP модульный тест для статических методов - PullRequest
0 голосов
/ 18 января 2019

Я очень новичок в модульном тестировании PHP. Я пытаюсь создать модульный тест для следующей функции:

    $context = $args[0];

    if (Subscriber::instance()->isSubscriber()) {
        $context['body_class'] .= ' ' . $this->bodyClass;
    }

    return $context;

Что очень просто и добавляет имя класса в массив, если пользователь является подписчиком. Подписчик - это класс, имеющий статический метод экземпляра, который возвращает значение true или false.

Пока я написал это, но я не думаю, что это правильно:

$subscriber = $this->getMockBuilder(Subscriber::class)
    ->disableOriginalConstructor()
    ->setMethods(['isSubscriber'])
    ->getMock();

$subscriber->expects($this->once())
    ->method('isSubscriber')
    ->will($this->returnValue(true));

$this->assertInternalType('bool',$subscriber->isSubscriber());

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 18 января 2019

Вы можете тестировать (утверждать) статические методы, но не можете насмехаться над ними или заглушки в PHPunit.

Из документации :

Обратите внимание, что окончательные, частные и статические методы нельзя использовать для заглушения или насмешки.Они игнорируются тестовой двойной функциональностью PHPUnit и сохраняют свое первоначальное поведение, за исключением статических методов, которые будут заменены методом, выдавшим \PHPUnit\Framework\MockObject\BadMethodCallException exception.

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...