【发布时间】:2014-03-23 02:17:27
【问题描述】:
我是单元测试新手,正在尝试对使用表单的旧 zend 应用程序的模型验证进行单元测试。
在其中一个表单中,它创建了第二个类的实例,我正在努力理解如何模拟依赖对象。表格内容如下:
class Default_Form_Timesheet extends G10_Form {
public function init() {
parent::init();
$this->addElement( 'hidden', 'idTimesheet', array( 'filters' => array ('StringTrim' ), 'required' => false, 'label' => false ) );
$this->addElement('checkbox', 'storyFilter', array('label' => 'Show my stories'));
$user = new Default_Model_User();
$this->addElement('select', 'idUser', array('filters' => array('StringTrim'), 'class' => 'idUser', 'required' => true, 'label' => 'User'));
$this->idUser->addMultiOption("","");
$this->idUser->addMultiOptions($user->fetchDeveloper());
...
......
当调用 $user->fetchDeveloper() 时出现我的问题。我怀疑它与模拟对象和依赖注入有关,但任何指导都会受到赞赏。我失败的单元测试如下...
require_once TEST_PATH . '/ControllerTestCase.php';
class TimesheetValidationTest extends ControllerTestCase {
public $Timesheet;
public $UserStub;
protected function setUp()
{
$this->Timesheet = new Default_Model_Timesheet();
parent::setUp();
}
/**
* @dataProvider timesheetProvider
*/
public function testTimesheetValid( $timesheet ) {
$UserStub = $this->getMock('Default_Model_User', array('fetchDeveloper'));
$UserStub->expects( $this->any() )
->method('fetchDeveloper')
->will( $this->returnValue(array(1 => 'Mickey Mouse')));
$Timesheet = new Default_Model_Timesheet();
$this->assertEquals(true, $Timesheet->isValid( $timesheet ) );
}
我的数据提供者在一个单独的文件中。
它在没有输出的命令行处终止,我有点难过。任何帮助将不胜感激。
【问题讨论】:
-
你可以模拟
init(),或者你需要确保找到外部类 -
感谢您的反馈。正在找到 User 类,它似乎是导致问题的“fetchDeveloper”调用。