这是我的目录结构
application
---modules
------admin
---------models
-----------User.php
这是我的用户模型类
class admin_Model_User
{
//User.php
}
这是我的UserTest类,带有简单的AssertType
class admin_Model_UserTest
extends PHPUnit_Framework_TestCase
{
public function testUserModel()
{
$testUser = new admin_Model_User();
$this->assertType("admin_Model_User",$testUser);
}
}
当我跑这个。我正在追踪错误
[tests]# phpunit
PHPUnit 3.5.13 by Sebastian Bergmann.
0
Fatal error: Class 'admin_Model_User' not found in /web/zendbase/tests/application/modules/admin/models/UserTest.php on line 18
我知道我必须有一些路径设置。我真的无法弄清楚究竟是什么问题。寻求帮助.....
答案 0 :(得分:0)
您需要在项目的PHPUnit bootstrap.php文件中引导Zend。即使您正在测试模型,因此不需要调度程序,您仍必须Zend_Application
加载application.ini
并注册其自动加载器。
您可以使用Zend_Test_PHPUnit_ControllerTestCase
来进行引导,并确保您的模型测试在其中一个之后运行,但这有点笨拙。
另一个选择是为每个测试手动require_once
模型类。这不能通过PHPUnit的自动加载器自动运行的原因是它不知道如何将“命名空间”admin_Model
转换为路径admin/models
。
最后,您可以编写一个简单的autoloader来替换PHPUnit中的那个。在将下划线转换为斜杠之前,请检查类是否以上面的“命名空间”开头,如果是,则替换它。
答案 1 :(得分:0)
我需要做的就是这个
//file:ControllerTestCase.php
<?php
require_once GLOBAL_LIBRARY_PATH. '/Zend/Application.php';
require_once GLOBAL_LIBRARY_PATH. '/Zend/Test/PHPUnit/ControllerTestCase.php';
abstract class ControllerTestCase extends Zend_Test_PHPUnit_ControllerTestCase
{
protected $_application;
protected function setUp()
{
$this->bootstrap = array($this, 'appBootstrap');
parent::setUp();
}
public function appBootstrap()
{
$this->_application = new Zend_Application(APPLICATION_ENV,
APPLICATION_PATH . '/configs/application.ini'
);
$this->_application->bootstrap();
/**
* Fix for ZF-8193
* http://framework.zend.com/issues/browse/ZF-8193
* Zend_Controller_Action->getInvokeArg('bootstrap') doesn't work
* under the unit testing environment.
*/
$front = Zend_Controller_Front::getInstance();
if($front->getParam('bootstrap') === null) {
$front->setParam('bootstrap', $this->_application->getBootstrap());
}
}
}
//然后在Bootstrap文件中require_once它。 多数民众赞成:)它正在运作。