我按照了此页面上的说明操作,但无法让我的单元测试工作。
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
答案 0 :(得分:3)
你的模拟设置不是很正确。您没有为模拟设置任何方法,因此您的预期并未真正设置。你需要像这样创建你的模拟:
$albumTableMock = $this->getMockBuilder('User\Model\UserData')
->disableOriginalConstructor()
->setMethods(array('getUserSessionArray')) //ADD this line
->getMock();
您的User\Model\UserData
类不存在,因此PHPUnit没有创建被模拟的方法。当你运行测试时,函数没有定义。