Макет несуществующего класса в PHPUnit 10 - PullRequest
1 голос
/ 05 марта 2020

До PHPUnit 10 можно было смоделировать несуществующий класс, используя следующий код:

    $this->getMockBuilder('NonExistentClass')
            ->setMethods(['__invoke'])
            ->getMock();

В PHPUnit 10 будет удалено setMethods(): https://github.com/sebastianbergmann/phpunit/issues/3769

В новом API MockBuilder появился метод addMethods(), который использует Reflection внутри и больше не позволяет работать с несуществующими классами.

Пожалуйста, посоветуйте, как мы можем создать макеты для несуществующего класса с новым API

Ответы [ 2 ]

0 голосов
/ 05 мая 2020

Вы можете издеваться \stdClass в качестве базового класса:

$mock = $this->getMockBuilder(\stdClass::class)>addMethods(['__invoke'])->getMock();
0 голосов
/ 30 марта 2020

Я закончил со следующим решением:

  • в моей папке tests я создал пустой "физический" класс:
<?php

namespace Tests\Helpers;

class EmptyCallableClass
{
    public function __invoke()
    {
    }
}

  • тогда в моих тестах я могу смоделировать это как все другие классы (пример из Laravel):
<?php

namespace Tests\Unit;

use PHPUnit\Framework\MockObject\MockObject;
use Tests\Helpers\EmptyCallableClass;
use Tests\TestCase;

class LravelMiddlewareTest extends TestCase
{
    /**
     * @var MockObject
     */
    private $closureMock;

    public function setUp(): void
    {
        $this->closureMock = $this->createPartialMock(EmptyCallableClass::class, ['__invoke']);
    }
}

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