Zend Framework UnitTest

时间:2012-01-04 13:33:13

标签: php zend-framework

我尝试使用Zend_Test_PHPUnit为我的应用程序编写单元测试,但我总是得到

1) IndexControllerTest::testValidation
Failed asserting last controller used <"error"> was "test"

我已经创建了一个测试控制器,但即使在那里我也无法让它工作。

有人可以帮忙吗?

谢谢!

class TestController extends Zend_Controller_Action
{

   public function indexAction()
   {
        print 'test';
   }

}

Bootstrap是:

// Define path to application directory
defined('APPLICATION_PATH')
     || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));

 // Define application environment
defined('APPLICATION_ENV')
    || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'testing'));

 // Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
    realpath(APPLICATION_PATH . '/../library'),
    get_include_path(),
)));

require_once'Zend / Loader / Autoloader.php'; Zend_Loader_Autoloader ::的getInstance();

phpunit.xml是:

<phpunit bootstrap="./bootstrap.php">
    <testsuite name="Application Test Suite">
        <directory>./application</directory>
    </testsuite>
    <testsuite name="Library Test Suite">
        <directory>./library</directory>
    </testsuite>

    <filter>
    <whitelist>
        <directory suffix=".php">../library/</directory>
        <directory suffix=".php">../application/</directory>
        </whitelist>
    </filter>
</phpunit>

测试控制器

class IndexControllerTest extends Zend_Test_PHPUnit_ControllerTestCase
{

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

    public function testValidation()
    {
         $this->dispatch('/test/');
         $this->assertController("test");
    }
}

2 个答案:

答案 0 :(得分:0)

在TestController中看起来像是一个错误。

您的视图是否可用(/test/index.phtml)?

好的解决方案是检查抛出的异常(在Try / Catch Block中包装单元测试并打印到错误日志)。

答案 1 :(得分:0)

我得到了完全相同的错误,但由于完全不同的问题。

更通用的解决方案可能是将其添加到测试方法

    print_r(strip_tags(
        $this->bootstrap
             ->getBootstrap()
             ->getResource('layout')
             ->content
    )); die;

这假设正在使用Zend_Layout ...它打印出error.phtml文件的内容,所以至少你可以看到到底发生了什么。

您应该看到类似的内容:

An error occurred 
Application error 

Exception information: 

    Message: {Your Error Message will appear here}


Stack trace: 
    {A stack trace will follow...}

在“消息:”之后显示您的特定错误消息,然后在“堆栈跟踪:”之后显示完整的堆栈跟踪。

希望这至少有助于调试潜在的问题