我对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
知道为什么会这样吗?模拟的实例不能替换原始add()函数版本中的AddressInterface实例。任何帮助表示赞赏!
答案 0 :(得分:0)
有时,你可以尝试模拟太多 - 如果实现AddressInterface
的类不是那么复杂,大多只是持有值,那么使用真实实例就完全没问题 - 特别是因为你有的代码实际上只是一个setter函数。
测试会创建一个足够实用的Address
,告诉AddressCollection
将其添加到数据中,并声明返回的数组包含与传递的地址相同的地址,或至少一个比以前更多了。
所有这一切,我做了一些模拟类,或者接口到PHP7.2,PHPUnit7的构造函数,并且在我测试的同时还在文件顶部设置declare(strict_types=1);
。< / p>