2011-05-05 141 views
0
 
class ControllerTest extends Zend_Test_PHPUnit_ControllerTestCase 
{ 
    public $object; 

    public function setUp() { 
     $this->bootstrap = array($this, 'boostrap'); 
     parent::setUp(); 
    } 

    public function bootstrap(){ 
     $this->application = new Zend_Application(
        APPLICATION_ENV, 
        APPLICATION_PATH . '/configs/application.ini' 
       ); 
     $this->application->bootstrap(); 

    } 

    public function testIndexAction(){ 
     // body 
    } 

} 

这是测试的类。我的问题是如何实现testIndexAction其中在命令提示符实际的命令是:PHPUnit配置测试

PHP zfrun.php -a ..index

+0

'zfrun.php'从哪里来?你可以链接到它的来源或发布它,如果它很短? Zend的ControllerTestCase被设计为给定一个派发路径,渲染视图并对结果内容作出断言。 – 2011-05-04 06:48:59

+0

zfrun.php来自测试,它也是应用程序的根。 zfrun.php就像一个引导文件。用于应用程序Bootstrap.php的实际引导程序还会实例化Zend_Console_Getopt,它也定义运行该应用程序的参数。 – Efox 2011-05-04 07:29:37

回答

0

没有确切看到的zfrun.php没有,我只能猜测,这听起来像你需要沟ControllerTestCaseControllerTestCase旨在模仿通过Zend调度程序发送的HTTP请求,但您并不需要这样做。

相反,你可以尝试通过设置$ argv的,因为它看起来和执行zfrun.php自己模仿调用命令行zfrun.php

function testIndexAction() { 
    $argv = array(
      '-a', 
      'module_name.controller_name.index', 
     ); 
    require 'zfrun.php'; 
} 

的问题是,这个工程的只有一个测试,假设zfrun.php定义了类或函数,并且不需要多次。因此,您需要在新的测试用例基类中执行zfrun.php所做的任何操作,而无需使用zfrun.php本身。基本上将其代码重构为可重用的测试帮助器方法。

function executeControllerAction($module, $controller, $action) { 
    ... whatever magic zfrun.php does ... 
} 
+0

我只是使用手动测试。我实际上需要处理PHPUnit测试的设置。 – Efox 2011-05-12 02:48:34

+0

PHPUnit支持您无疑发现的手动和自动测试。但是,您必须设置您的环境以允许PHPUnit访问您的课程和/或环境。这是否回答您的问题或帮助您解决您遇到的问题? – 2011-05-12 04:59:11

0

如果这是你的主页的测试,使用

$this->dispatch('/'); 

如果没有,你得给它,这将触发加载此控制器路由的URL。