Макетировать создание интерфейса в списке аргументов вызова функции с помощью phpunit

Я немного новичок в phpunit. Я пытался охватить эту функцию.

public function add(AddressInterface $address) : array
{
$this->data[] = $address;
return $this->data;
}

Моя тестовая функция заключается в следующем

public function testAdd()
{
$collection = new AddressCollection();
$collection->add($this->createMock(AddressInterface::class));
}

и пространства имен одинаковы. Но всякий раз, когда я пытаюсь запустить phpunit, я получаю эту ошибку.
TypeError: Argument 1 passed to ValidateAddress\Model\AddressCollection::add() must be an instance of AddressInterface, instance of Mock_AddressInterface_65a1b00b given, called in validateaddress/tests/Model/AddressCollectionTest.php

Есть идеи, почему это происходит? Испорченный экземпляр не может заменить экземпляр AddressInterface в исходной версии функции add (). Любая помощь приветствуется!

0

Решение

Иногда вы можете попытаться высмеять слишком много — если класс, который реализует AddressInterface это не так сложно, в основном это просто хранение значений, может быть вполне нормально использовать реальный экземпляр — тем более что код, который у вас есть, фактически является просто функцией-установщиком.

Тест создаст достаточно реальный Address, скажи AddressCollection добавить его к данным и утверждать, что возвращаемый массив содержит тот же адрес, по которому он был передан, или, по крайней мере, еще один адрес, который был там.

Все это говорит, что я иногда делаю фиктивные классы или интерфейсы в конструктор с PHP7.2, PHPUnit7 и с классом, который я тестирую, также устанавливаю declare(strict_types=1); в верхней части файла.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector