gpt4 book ai didi

php - 使用 phpunit 在函数调用参数列表中模拟接口(interface)实例化

转载 作者:行者123 更新时间:2023-11-28 20:50:32 26 4
gpt4 key购买 nike

我对 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:传递给 ValidateAddress\Model\AddressCollection::add() 的参数 1 必须是 AddressInterface 的实例,给定的 Mock_AddressInterface_65a1b00b 实例,在 validateaddress/tests/Model/AddressCollectionTest.php 中调用

知道为什么会这样吗?模拟实例不能替换原始 add() 函数版本中的 AddressInterface 实例。感谢您的帮助!

最佳答案

有时,您可以尝试模拟太多 - 如果实现 AddressInterface 的类不是那么复杂,主要只是保存值,那么使用真实实例可能会非常好 - 特别是因为您拥有的代码实际上只是一个 setter 函数。

测试将创建一个足够真实的 Address,告诉 AddressCollection 将它添加到数据中,并断言返回的数组包含与它之前相同的地址通过,或者至少比以前多了一个。

总而言之,我有时会模拟类,或者使用 PHP7.2、PHPUnit7 和我正在测试的类连接到构造函数,同时设置 declare(strict_types=1); 在文件的顶部。

关于php - 使用 phpunit 在函数调用参数列表中模拟接口(interface)实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49008750/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com