我正在为我的应用程序创建一些测试用例,但我陷入了困境。我正在尝试为课程设置一个属性。但是它是父类的属性。这是我的实际方法
public function uploadFiles($files, $endpoint = 'outbox', $config = [])
{
$user = $this->_BxApi->users->getUser($config);
$result = [];
foreach ($files as $key => $file) {
$policy = 'policy' . $key;
$result[] = $this->_fileUploader->uploadFile($file, $policy, $config);
}
return $result;
}
这是类
Uploads
中的一种方法,其范围为类API
和API类为class Api
{
public function __construct(BxClient $bxclient)
{
$this->_BxApi = $bxclient;
}
}
我的测试用例是
public function testUploadFiles_Upload2Files()
{
$bxMock = $this->_getMock(\BxClient\Core\Api\Uploads::class, [
'_request' => true
]);
$this->_setProperty($bxMock, 'users', $this->_getMock(Users::class, [
'getUser' => (object) ['userId' => 'test']
]));
$this->_setProperty($bxMock, '_fileUploader', $this->_getMock(FileUploader::class, [
'uploadFile' => true,
]));
$result = $bxMock->uploadFiles(['1.txt', '2.txt']);
$this->assertEquals(2, count($result));
$this->assertTrue($result[0]);
$this->assertTrue($result[1]);
}
我认为我在做错事
$this->_setProperty($bxMock, 'users', $this->_getMock(Users::class, [
'getUser' => (object) ['userId' => 'test']
]));
更新资料
这是错误
ReflectionException:属性用户不存在
提前致谢。
最佳答案
如果我对您的理解正确,那么您就有扩展了类Uploads
的类API
。类API
在属性_BxApi
中具有内部对象。此内部对象的字段为users
。但是在代码中,您尝试将属性设置为Uploads
的实例,而不是_BxApi
字段的内部对象。
您应该将users
字段设置为_BxApi
字段中的内部对象。
更新:
您的代码应类似于以下伪代码:
$bxMock = $this->_getMock(BxClient::class, [arguments goes here]);
$this->_setProperty($bxMock, 'users', $this->_getMock(Users::class, [
'getUser' => (object) ['userId' => 'test']
]));
$uploads = $this->_getMock(\BxClient\Core\Api\Uploads::class, [
'_BxApi' => $bxMock,
]);
接下来的主要思想-首先,创建将放置到
$bxMock
实例的内部对象(Uploads
),然后创建Uploads
本身的实例,并将先前创建的内部对象($bxMock
)放入其中。关于php - PHP单元测试-属性不存在,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50795709/