【问题标题】:php unit testing - Property does not existphp单元测试-属性不存在
【发布时间】:2018-11-20 14:02:04
【问题描述】:

我正在为我的应用程序创建一些测试用例,但我陷入了困境。我正在尝试为该类设置一个属性。但它是一个父类属性。这是我的实际方法

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: 属性用户不存在

提前致谢。

【问题讨论】:

    标签: php unit-testing oop testing


    【解决方案1】:

    如果我对您的理解正确,您的课程 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,
    ]);
    

    接下来的主要思想 - 首先,创建将放置到 Uploads 实例的内部对象 ($bxMock),然后创建 Uploads 本身的实例并将之前创建的内部对象 ($bxMock )。

    【讨论】:

    • @ManojKumar,有帮助吗?
    猜你喜欢
    • 2016-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多