有没有人成功设置Zend_Test?您的方法/方法是什么?如何运行测试/测试套件?
我已经安装并运行了PHPUnit。现在我正在尝试编写一些简单的控制器测试。 Zend Framework文档假定已设置自动加载,我还没有这样做。 你使用什么方法来自动加载相应的文件?我在正常的bootstrap文件中这样做,但我不想用一堆包含和设置路径来混乱我的Test。抽象控制器测试用例类是否可行?
像文档一样使用的引导程序插件...是你如何引导你的测试,或者你喜欢以不同的方式做到这一点?我想尽可能多地重复使用常规引导程序文件。我应该如何干燥我的引导程序以进行测试和正常使用?
到目前为止,这是我的测试:
<?php
class IndexControllerTest extends Zend_Test_PHPUnit_ControllerTestCase
{
public function setUp()
{
$this->bootstrap = array($this, 'appBootstrap');
parent::setUp();
}
public function appBootstrap()
{
$this->frontController->registerPlugin(new Bootstrapper('testing'));
}
public function testIndexAction()
{
$this->dispatch('/index');
$this->assertController('index');
$this->assertAction('index');
}
}
//straight from the documentation
class Bootstrapper extends Zend_Controller_Plugin_Abstract
{
/**
* @var Zend_Config
*/
protected static $_config;
/**
* @var string Current environment
*/
protected $_env;
/**
* @var Zend_Controller_Front
*/
protected $_front;
/**
* @var string Path to application root
*/
protected $_root;
/**
* Constructor
*
* Initialize environment, root path, and configuration.
*
* @param string $env
* @param string|null $root
* @return void
*/
public function __construct($env, $root = null)
{
$this->_setEnv($env);
if (null === $root) {
$root = realpath(dirname(__FILE__) . '/../../../');
}
$this->_root = $root;
$this->initPhpConfig();
$this->_front = Zend_Controller_Front::getInstance();
}
/**
* Route startup
*
* @return void
*/
public function routeStartup(Zend_Controller_Request_Abstract $request)
{
$this->initDb();
$this->initHelpers();
$this->initView();
$this->initPlugins();
$this->initRoutes();
$this->initControllers();
}
// definition of methods would follow...
}
我该怎么办?
答案 0 :(得分:3)
以下是我为了让它发挥作用所做的事情:
首先,我们需要解决自动加载问题。我们将通过创建一个包含所有测试的文件来完成此操作,并将其放在tests目录中。注意:我几乎从/public/index.php复制了所有这些。
# /tests/loader.php
<?php
define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application/'));
set_include_path( APPLICATION_PATH . '/../library' . PATH_SEPARATOR .
APPLICATION_PATH . '/models' . PATH_SEPARATOR .
APPLICATION_PATH . '/forms' . PATH_SEPARATOR .
get_include_path() );
require_once "Zend/Loader.php";
Zend_Loader::registerAutoload();
其次,我们需要在测试中包含此文件。我们的测试文件位于/ tests / application / controllers /中。我不会将我的引导程序用作插件,因为我的引导文件的工作方式与QuickStart tutorial相同。我只需将位置设置为public $ bootstrap即可链接到它。当Zend_Test_PHPUnit_ControllerTestCase
构造时,它将查找我们在此处设置的引导程序文件。
<?php
require_once '../../loader.php';
class IndexControllerTest extends Zend_Test_PHPUnit_ControllerTestCase
{
public $bootstrap = '../../../application/bootstrap.php';
public function testIndexAction()
{
$this->dispatch('/index');
$this->assertController('index');
$this->assertAction('index');
}
}
就是这样!如果我的引导文件已经是一个插件,这可能会有点复杂,但是因为它不是,所以它非常简单。
答案 1 :(得分:1)
而不是使用
require_once "Zend/Loader.php";
Zend_Loader::registerAutoload();
将其更改为
require_once 'Zend/Loader/Autoloader.php';
Zend_Loader_Autoloader::getInstance();
registerAutoLoad()自1.8.0起不推荐使用
答案 2 :(得分:0)
我总是使用一个简单的TestHelper.php做一些基本的初始化工作。此文件包含在每个测试用例文件中。我做的一件事是注册Zend Framework自动加载器,因为我遇到了主要的依赖问题,特别是在使用过滤器,验证器和表单时。几乎不可能跟踪所有必需的文件,并在测试用例中手动包含它们。
您可以将自动加载初始化和包含路径的设置移动到bootstrapping插件中,因为此过程对于实际应用程序应该是相同的。