Nano Hash - криптовалюты, майнинг, программирование

Не удается заставить Zend Studio и PHPunit работать вместе

У меня есть простой скелетный проект доктрины 2/zend, и я пытаюсь заставить модульное тестирование работать с zend studio.

Тесты отлично работают через интерфейс командной строки 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('[email protected]');
    $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 />
15.11.2011

  • Учитывая, что он говорит о неожиданном T_STRING в /var/www/z2d2/tests/application/models/UserModelTest.php, было бы интереснее увидеть этот файл. 15.11.2011
  • извините, я не уверен, что вы имеете в виду. 15.11.2011
  • Warning: Unexpected character in input: '\' (ASCII=92) state=1 in ... выглядит как код php 5.3 (пространства имен), работающий с PHP 5.2 15.11.2011
  • Проверьте Windows › Настройки › PHP › Исполняемые файлы PHP. Включен ли 5.3.x? 15.11.2011
  • Вполне возможно. Я новичок в этом. У меня есть проект .... свойства..... интерпретатор PHP установлен на 5.3, но, возможно, это что-то в этом роде 15.11.2011
  • Ты был прав, Гордон. Теперь я установил 5.3 по умолчанию в исполняемых файлах PHP и получаю другую ошибку, которую я добавлю в конец моего исходного сообщения. 15.11.2011
  • Вы запускали тест с помощью Run As Script или Run as PHPUnit Test? Кроме того, настроен ли PHPUnit на вашем пути включения? Щелкните правой кнопкой мыши папку проекта, а затем выберите «Настроить путь включения». Если PHPUnit нет в списке: добавьте библиотеку и выберите PHPUnit. И, наконец, убедитесь, что у вас есть автозагрузчик для ваших собственных файлов. 15.11.2011
  • Я запускаю его как тест PHPunit. Да, PHPunit настроен на мой путь включения. Мой основной бутстрап приложения разбирает всю автозагрузку. Должен ли я иметь какой-либо другой автозагрузчик в моей начальной загрузке PHPunit? 16.11.2011

Ответы:


1

Первая проблема заключалась в том, что среда 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 ничего не может вам помочь :)

15.11.2011
  • Спасибо. Почему PHPunit работает правильно вне Zend Studio. Я думаю, что настроил его так, как вы предложили: мой phpunit.xml указывает на мой загрузчик phpunit, для которого требуется отсутствующий ModelTestCase. Я пропустил что-то действительно основное здесь? 15.11.2011
  • @dimbo Я понятия не имею, заботится ли Zend Studio о файле конфигурации phpunit вообще. Проблема, которую я мог видеть и решить, заключалась в версии PHP, но из дополнительного вопроса вы, возможно, захотите открыть другой вопрос или посмотреть на форумах Zend ... может быть, вам нужно снова указать файл начальной загрузки в конфигурации Zend Studio где-то? Извините, я могу помочь вам только запустить PHPUnit, а не IDE в деталях, так как я не особо забочусь об этом и не использую его :) 15.11.2011
  • Спасибо, Эдориан и Гордон. Вы правы, первоначальный вопрос был решен. Я открою еще один вопрос: проблема с загрузкой. 16.11.2011
  • Только что решил и другую проблему: если вы хотите, чтобы ZS запускал загрузчик PHPunit, вам нужно специально выбрать файл PHPunit.xml и сказать, чтобы он запускался как тест PHPunit. Если вы просто выберете отдельный тест и запустите его как тест PHPunit, бутстрап не запустится... или мне так кажется! 16.11.2011
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..