Magento-UnitTests-模拟对象

| 我正在使用Ivan Chepurnyi的扩展程序为Magento模块编写一些测试,但在使用模拟对象时遇到了麻烦。 这是课程:
<?php
class Namespace_Module_Block_Class extends Mage_Core_Block_Template
{
    private $_salesCollection;

    public function __construct()
    {
        $this->_salesCollection = Mage::getModel(\'module/classA\')->getCollection()
                                ->addFieldToFilter(\'id\', $this->_getId());
    }

    public function _getId()
    {
        return Mage::getModel(\'module/classB\')->getId();//session params
    }

    public function getSalesTotalNumber()
    {
        return $this->_salesCollection->count();
    }
}
我尝试测试的方法是getSalesTotalNumber()。 这是测试:
<?php
class Namespace_Module_Test_Block_Class extends EcomDev_PHPUnit_Test_Case
{
    private $_mock;

    public function setUp()
    {
        $this->_mock = $this->getMock(\'Namespace_Module_Block_Class\',
                                        array(\'_getId\')
                                      );
        $this->_mock->expects($this->any())
                    ->method(\'_getId\')
                    ->will($this->returnValue(1024));

        parent::setUp();
    }

    /**
     * @test
     * @loadFixture
     * @loadExpectation
     */
    public function testSalesTotalNumber()
    {
        $actual = $this->_mock->getSalesTotalValue();
        $expected = $this->_getExpectations()->getSalesTotalNumber();

        $this->assertEquals($expected, $actual);
    }
}
如您所见,我想做的是覆盖_getId()方法,以便它返回一个与灯具中的ID匹配的ID,然后加载集合。但这不起作用:-(。 在我的测试中,如果我回显
$this->_mock->_getId()
,它将返回正确的ID(1024)。但是在类
__construct()
中,
$this->_getId()
返回null,这是测试期间的期望值(我的意思是,在测试期间没有会话,因此当我将其存储在会话变量中时它无法获取对象的ID )。因此_getId()方法没有被我的测试用例嘲笑。 任何帮助将不胜感激。     
已邀请:
所以我的问题不是在模拟/测试中,而是在课堂上。 我已经将“ 3”的内容移到了一个受保护的方法中,该方法返回了集合对象。这就是我的班级现在的样子:
<?php
class Namespace_Module_Block_Class extends Mage_Core_Block_Template
{
    private $_salesCollection;

    protected function _getAffiliateSales()
    {
        if (is_null($this->_salesCollection)) {
            $affiliateId = $this->_getId();
            $this->_salesCollection = Mage::getModel(\'module/classA\')
                                ->addFieldToFilter(\'id\', $affiliateId);
        }
        return $this->_salesCollection;
    }

    public function _getId()
    {
        return Mage::getModel(\'module/classB\')->getId();//session params
    }

    public function getSalesTotalNumber()
    {
        return $this->_getAffiliateSales()->count();
    }
}
    

要回复问题请先登录注册