gpt4 book ai didi

php - Magento - 单元测试 - 模拟对象

转载 作者:行者123 更新时间:2023-12-03 00:16:26 25 4
gpt4 key购买 nike

我正在为 Magento 模块编写一些测试,使用 Ivan Chepurnyi's extension ,并且我在使用模拟对象时遇到问题。
这是类(class):

<?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,从而加载集合。但它不起作用:-(。

在我的测试中,如果我 echo $this->_mock->_getId() 它会返回正确的 Id (1024)。但在我的类的 $this->_getId()__construct() 中返回 null,这是测试期间的预期值(我的意思是,在测试期间没有 session ,因此它无法获取对象的 Id,因为我将其存储在 session 变量中)。因此,_getId() 方法没有被我的测试用例模拟

任何帮助将不胜感激。

最佳答案

所以我的问题不是在模拟/测试中,而是在类里面。
我已将 __construct() 的内容移至返回集合对象的 protected 方法中。这就是我的类(class)现在的样子:

<?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();
}
}

关于php - Magento - 单元测试 - 模拟对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5650061/

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