5

我是单元测试的新手,我正在努力让工作成为第一个测试!

我两次收到这个长错误:

    Fatal Error :Maximum function nesting level of '100' reached, aborting in
 C:\wamp\www\portailmg\dev\library\Zend\Test\PHPUnit\ControllerTestCase.php on line 27
    9

我的 bootstrap.php:

   <?php

error_reporting( E_ALL | E_STRICT );
ini_set('display_startup_errors', 1);
ini_set('display_errors', 1);
date_default_timezone_set('Europe/London');



define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../applications/portail'));
define('APPLICATION_ENV', 'development');
define('LIBRARY_PATH', realpath(dirname(__FILE__) . '/../library'));
define('TESTS_PATH', realpath(dirname(__FILE__)));


$_SERVER['SERVER_NAME'] = 'http://localhost';

$includePaths = array(LIBRARY_PATH, get_include_path());
set_include_path(implode(PATH_SEPARATOR, $includePaths));

require_once 'Zend/Loader/Autoloader.php';
$loader = Zend_Loader_Autoloader::getInstance();



Zend_Session::$_unitTestEnabled = true;
Zend_Session::start();

我的 phpunit.xml:

<phpunit bootstrap="./bootstrap.php" colors="false">
    <testsuite name="MyApp">
        <directory>./application/</directory>
        <directory>./library/</directory>
    </testsuite>
    <filter>
        <whitelist>
            <directory suffix=".php">../application</directory>
            <directory suffix=".php">../library/Custom</directory>
            <exclude>
                <directory suffix=".phtml">../application/views</directory>
                <file>../application/Bootstrap.php</file>
            </exclude>
        </whitelist>
    </filter>
    <logging>
        <log type="coverage-html" target="./log/coverage" charset="UTF-8"
             yui="true" highlight="false" lowUpperBound="35" highLowerBound="70"/>
    </logging>
</phpunit>

ControllerTestCase.php

<?php
class ControllerTestCase extends Zend_Test_PHPUnit_ControllerTestCase
{
    public $application;

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

        $this->bootstrap = array($this, 'bootstrap');
        parent::setUp();

    }

    public function tearDown()
    {
        Zend_Controller_Front::getInstance()->resetInstance();
        $this->resetRequest();
        $this->resetResponse();

        $this->request->setPost(array());
        $this->request->setQuery(array());
    }

}
?>

HomeControllerTest.php

<?php

require_once 'application/ControllerTestCase.php';
require_once 'application/controllers/HomeControllerTest.php';

class HomeControllerTest extends ControllerTestCase
{
    public function testLoginAction()
    {
        $this->dispatch('/index/logincra'); //distribuer l'URL à tester en utilisant la méthode dispatch()
        $this->assertController('index'); //spécifie le controller à tester
        $this->assertAction('logincra'); //spécifie l'action à tester




        /*
            Assert against DOM selection; should contain exact number of nodes

            param: string $path CSS selector path
            param: string $count Number of nodes that should match
            param: string $message
            return: void
        */

        $this->assertQueryCount('div.login', 1);
    }

    public function testlogincraAction()
    {
        $this->getRequest()
        ->setMethod('POST')
        ->setPost(array("username" => "example@example.com",
                                       "password" => "password"));
        $this->dispatch('/index/logincra');

        $oLdap = new Mediagong_Ldap_Connect($_POST["username"], $_POST["password"]);

        $this->assertEquals($oLdap->isLoggin(), true);
        $this->assertRedirectTo('/index');
    }
}

树状:

dev
  applications
      portail  
         configs
         controllers
         layouts
         models
         services
         views
         Bootstrap.php
  htdocs
  ..
  ..
  tests
      application
        controllers
        controllerTestCase.php
      library
      log
      bootstrap.php
      phpunit.xml

在此先感谢您的帮助

4

2 回答 2

7

如果您使用 Xdebug,您可能需要增加max_nesting_level. 看看Xdebug 手册

xdebug.max_nesting_level

类型:整数,默认值:100

控制无限递归保护的保护机制。此设置的值是在中止脚本之前允许的最大嵌套函数级别。

只需将值添加到您的php.ini. 我有大约 250 个,具体取决于您运行的测试数量及其复杂性。

于 2013-05-28T10:43:41.447 回答
0

一个简单的解决方案解决了我的问题。我刚刚评论了:

"zend_extension = "d:/wamp/bin/php/php5.3.8/zend_ext/php_xdebug-2.1.2-5.3-vc9.dll"

在 php.ini 文件中。这个扩展将堆栈限制为 100,所以我禁用了它。递归函数现在按预期工作。

于 2013-05-28T13:02:35.060 回答