Я немного новичок в 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 (). Любая помощь приветствуется!
Иногда вы можете попытаться высмеять слишком много — если класс, который реализует AddressInterface
это не так сложно, в основном это просто хранение значений, может быть вполне нормально использовать реальный экземпляр — тем более что код, который у вас есть, фактически является просто функцией-установщиком.
Тест создаст достаточно реальный Address
, скажи AddressCollection
добавить его к данным и утверждать, что возвращаемый массив содержит тот же адрес, по которому он был передан, или, по крайней мере, еще один адрес, который был там.
Все это говорит, что я иногда делаю фиктивные классы или интерфейсы в конструктор с PHP7.2, PHPUnit7 и с классом, который я тестирую, также устанавливаю declare(strict_types=1);
в верхней части файла.
Других решений пока нет …