麻烦运行单元测试 - 得到未定义的方法错误

时间:2013-08-01 14:47:00

标签: phpunit zend-framework2

我按照了此页面上的说明操作,但无法让我的单元测试工作。

http://framework.zend.com/manual/2.2/en/tutorials/unittesting.html

我的初始代码是这样的:

<?php

namespace ApplicationTest\Controller;

use Zend\Http\Request;
use Zend\Http\Response;
use Zend\Test\PHPUnit\Controller\AbstractHttpControllerTestCase;

class IndexControllerTest extends AbstractHttpControllerTestCase {

    protected $controller;
    protected $request;
    protected $response;
    protected $routeMatch;
    protected $event;
    protected $traceError = true;

    public function setUp() {

        $this->setApplicationConfig(
            include '../../../config/application.config.php'
        );
        parent::setUp();
    }

    public function testIndexActionCanBeAccessed() {

        $this->dispatch('/');
        $this->assertResponseStatusCode(200);

    }
}

当我运行phpunit时,我收到以下错误消息:

Sebastian Bergmann的PHPUnit 3.7.21。

从/usr/share/php/tool/module/Application/test/phpunit.xml读取的配置

onDispatch调用。 ë

时间:1秒,记忆:14.50Mb

有1个错误:

1)ApplicationTest \ Controller \ IndexControllerTest :: testIndexActionCanBeAccessed Zend \ ServiceManager \ Exception \ ServiceNotFoundException:Zend \ ServiceManager \ ServiceManager :: get无法为Zend \ Db \ Adapter \ Adapter

获取或创建实例

然后我按照第二组说明配置服务管理器。

public function testIndexActionCanBeAccessed() {

    $albumTableMock = $this->getMockBuilder('User\Model\UserData')
        ->disableOriginalConstructor()
        ->getMock();

    $albumTableMock->expects($this->once())
        ->method('getUserSessionArray')
        ->will($this->returnValue(array()));

    $serviceManager = $this->getApplicationServiceLocator();
    $serviceManager->setAllowOverride(true);
    $serviceManager->setService('User\Model\UserData', $albumTableMock);

    $this->dispatch('/');
    $this->assertResponseStatusCode(200);

}

这一次,我收到了以下错误:

Sebastian Bergmann的PHPUnit 3.7.21。

从/usr/share/php/tool/module/Application/test/phpunit.xml读取的配置

onDispatch调用。 PHP致命错误:在第95行的/usr/share/php/tool/module/User/Module.php中调用未定义的方法Mock_UserData_ae821217 :: getUserSessionArray() PHP堆栈跟踪: PHP 1. {main}()/ usr / local / pear / bin / phpunit:0 ...

有人可以帮我吗?

我们正在使用Zend Framework 2.2.0。

非常感谢你。

EC

1 个答案:

答案 0 :(得分:3)

你的模拟设置不是很正确。您没有为模拟设置任何方法,因此您的预期并未真正设置。你需要像这样创建你的模拟:

$albumTableMock = $this->getMockBuilder('User\Model\UserData')
    ->disableOriginalConstructor()
    ->setMethods(array('getUserSessionArray'))  //ADD this line
    ->getMock();

您的User\Model\UserData类不存在,因此PHPUnit没有创建被模拟的方法。当你运行测试时,函数没有定义。