Не удается заставить Zend Studio и PHPunit работать вместе - PullRequest
1 голос
/ 15 ноября 2011

Я создал простой проект doctrine2 / zend skeleton и пытаюсь организовать модульное тестирование в Zend Studio.

Тесты отлично работают через CLI PHPunit, но я просто не могу заставить их работать в Zend Studio.

Появляется сообщение об ошибке: «Тесты не выполнялись» иследующий вывод в окне отладки:

X-Powered-By: PHP/5.2.14 ZendServer/5.0
Set-Cookie: ZendDebuggerCookie=127.0.0.1%3A10137%3A0||084|77742D65|1016; path=/
Content-type: text/html

<br />
<b>Warning</b>:  Unexpected character in input:  '\' (ASCII=92) state=1 in <b>/var/www/z2d2/tests/application/models/UserModelTest.php</b> on line <b>8</b><br />
<br />
<b>Warning</b>:  Unexpected character in input:  '\' (ASCII=92) state=1 in <b>/var/www/z2d2/tests/application/models/UserModelTest.php</b> on line <b>8</b><br />
<br />
<b>Parse error</b>:  syntax error, unexpected T_STRING in <b>/var/www/z2d2/tests/application/models/UserModelTest.php</b> on line <b>8</b><br />

Тест выглядит следующим образом:

<?php
require_once 'Zend/Application.php';
require_once 'Zend/Test/PHPUnit/ControllerTestCase.php';

abstract class ControllerTestCase extends Zend_Test_PHPUnit_ControllerTestCase
{

    public function setUp()
    {

      $this->bootstrap = new Zend_Application(
        'testing',
        APPLICATION_PATH . '/configs/application.ini'
      );



        parent::setUp();
    }

    public function tearDown()
    {
      parent::tearDown();
    }

}



<?php

class IndexControllerTest extends ControllerTestCase
{

    public function testDoesHomePageExist() 
    {
        $this->dispatch('/');
        $this->assertController('index');
        $this->assertAction('index');

    }   

}



<?php

class ModelTestCase extends PHPUnit_Framework_TestCase
{

  protected $em;

  public function setUp()
  {

    $application = new Zend_Application(
      'testing', 
      APPLICATION_PATH . '/configs/application.ini'
    );

    $bootstrap = $application->bootstrap()->getBootstrap();

    $this->em = $bootstrap->getResource('entityManager'); 

    parent::setUp();

  }

  public function tearDown()
  {
    parent::tearDown();
  }

}


<?php

class UserModelTest extends ModelTestCase
{

  public function testCanInstantiateUser()
  {
    $this->assertInstanceOf('\Entities\User', new \Entities\User);
  }

  public function testCanSaveAndRetrieveUser()
  {

    $user = new \Entities\User;

    $user->setFirstname('wjgilmore-test');
    $user->setemail('example@wjgilmore.com');
    $user->setpassword('jason');
    $user->setAddress1('calle san antonio');
    $user->setAddress2('albayzin');
    $user->setSurname('testman');
    $user->setConfirmed(TRUE);


    $this->em->persist($user);
    $this->em->flush();

    $user = $this->em->getRepository('Entities\User')->findOneByFirstname('wjgilmore-test');

    $this->assertEquals('wjgilmore-test', $user->getFirstname());



  }


  public function testCanDeleteUser()
  {
    $user = new \Entities\User;
    $user = $this->em->getRepository('Entities\User')->findOneByFirstname('wjgilmore-test');

    $this->em->remove($user);
    $this->em->flush();


  }





}

И загрузчик:

<?php

define('BASE_PATH', realpath(dirname(__FILE__) . '/../../'));

define('APPLICATION_PATH', BASE_PATH . '/application');

set_include_path(
    '.'
    . PATH_SEPARATOR . BASE_PATH . '/library'
    . PATH_SEPARATOR . get_include_path()
);


require_once 'controllers/ControllerTestCase.php';
require_once 'models/ModelTestCase.php';

Вот новая ошибка послеустановив PHP исполняемый на 5.3, как предложил Гордон:

X-Powered-By: PHP/5.3.3 ZendServer/5.0
Set-Cookie: ZendDebuggerCookie=127.0.0.1%3A10137%3A0||084|77742D65|1000; path=/
Content-type: text/html

<br />
<b>Fatal error</b>:  Class 'ModelTestCase' not found in <b>/var/www/z2d2/tests/application/models/UserModelTest.php</b> on line <b>4</b><br />

1 Ответ

0 голосов
/ 15 ноября 2011

Первая проблема заключалась в том, что в среде IDE было установлено использование PHP 5.2, но код был PHP 5.3.

Unexpected character in input:  '\' (ASCII=92) state=1

обычно намекает на эту проблему.

После исправления этой другой ошибкиявляется то, что класс не может быть найден.Это потому, что PHP не может найти нужный класс.Скорее всего, автозагрузчик Zend Framework не был настроен должным образом.

Если это происходит во время тестирования, убедитесь, что ваш phpunit.xml содержит запись <phpunit bootstrap="yourApplicationBootstrap.php" ..., где инициализируется ваш автозагрузчик.

Как это работает описано в документации ZF, и phpunit не может помочь вам:)

...