PHPUnit тестирует класс с методом expected () в нем - PullRequest
0 голосов
/ 05 февраля 2019

Проблема в том, что у меня издевается метод expects().Этот класс является зависимостью от класса, который я тестирую.

setUp () метод

$this->test = $this->getMockBuilder(Request::class)->disableOriginalConstructor()
        ->getMock();

Поэтому, когда я пишу свой тест

$this->test->expects($this->once())->method('otherMethod')
        ->willReturn(0);

Это дастошибка:

Невозможно переопределить Mock_Test_f21c25ee :: ожидает () в ...

Как мне решить эту проблему?

Редактировать:

После того, как я попробовал предлагаемое решение с setMethodsExcept(), у меня теперь другое сообщение об ошибке.Я также использую PHPunit 7.5

Декларация Mock_Test_fa1cb6c5 :: ожидает

Примечание: забыл упомянуть, что я использую Laravel 5.5, который имеет собственный класс TestBase

Edit2: после того, как я попробовал использовать тестовый сценарий PHPUnit по умолчанию, я все еще получаю то же сообщение об ошибке, что и выше,(Должно быть совместимо с ошибкой)

1 Ответ

0 голосов
/ 07 февраля 2019

Вам нужно использовать метод setMethodsExcept(), чтобы избежать повторного объявления метода excepts.

Создание макета таким образом должно работать:

$this->request = $this->getMockBuilder(Request::class)
    ->setMethodsExcept(['expects'])
    ->disableOriginalConstructor()
    ->getMock();

Редактировать : немного пояснений:

Чтобы проверить ваш случай, я сделал следующее:

class Expecting
{
    public function get()
    {
        return 'my json';
    }

    public function expects()
    {
        return 'who knows what';
    }
}

class ClassA
{
    public function testMe($the_expect_dependency)
    {
        $the_expect_dependency->get();
    }
}

И в моем модульном тесте у меня было почти то же самое объявление, что и у вас:

class ClassATest extends \PHPUnit\Framework\TestCase
{
    public function testThatItCanBeMocked()
    {
        $mock = $this->getMockBuilder(Expecting::class)
            ->setMethodsExcept(['expects'])
            ->disableOriginalConstructor()
            ->getMock();

        $mock->expects($this->once())->method('get')
            ->willReturn('my json');

        $my_obj = new ClassA();
        $my_obj->testMe($mock);
    }
}

При удалении вызова setMethodsExcept() это дает именно ту ошибку, которую вы упомянули, а неуверен, что могло пойти не так?

Кстати, я использую phpunit версии 7.5.

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