Как работает PHPUnit - Неправильно ли задан путь включения? - PullRequest
20 голосов
/ 04 ноября 2010

Я пытаюсь заставить PHPUnit работать в моей среде разработки, но я столкнулся с некоторыми препятствиями, когда дело доходит до включения PHPUnit в мои скрипты. Я знаю, что мне нужно установить путь включения в PHP, но каждая пробная комбинация завершается сбоем, и компилятор не видит класс PHPUnit_Framework_TestCase.

Я только что запустил обновления на PHP и PEAR, и на компьютере установлен PHPUnit, потому что я могу получить к нему доступ через командную строку.

PHPUnit установлен в / usr / share / php / PHPunit

Груша находится на / usr / share / php / PEAR

Есть что-то, что я пропускаю? Я впервые пытаюсь использовать PHPUnit или даже что-то из PEAR. Я на Ubuntu 10.10. Любая помощь будет оценена.

Edit - в моем PHP ini нет ничего в пути включения. Прямо сейчас код просто

<?php
class Stacktest extends PHPUnit_Framework_TestCase
{

}

Я понятия не имею, что включать или что устанавливать в пути включения, поскольку кажется, что для всей информации в Интернете о PHPUnit эта небольшая информация критически отсутствует.

Ответы [ 5 ]

26 голосов
/ 10 января 2011

Начиная с PHPUnit 3.5, вы должны включить автозагрузчик самостоятельно:

require 'PHPUnit/Autoload.php'; // PEAR should be in your include_path
16 голосов
/ 06 января 2011

Если вы правильно установили phpunit (через PEAR), тогда нет необходимости включать файл;вам просто нужно изменить способ, которым вы используете его для тестирования файлов php (например, вы используете его для проверки работоспособности файла, перейдя в браузер типа localhost).С phpunit вы можете использовать командную строку; глава 5 приводит тот же пример с использованием командной строки (я бы предположил, что это стандарт).Так что, если вы установили его правильно, вы можете сделать это:

  1. Файл ExampleTest.php, расположенный в корне localhost (для меня это / var / www):

    class ExampleTest extends PHPUnit_Framework_TestCase
    {
        public function testOne()
        {
            $this->assertTrue(FALSE);
        }
    }
    
  2. Откройте консоль (терминал на Mac или Linux, командную строку на Win), перейдите в корневой каталог документа localhost (где вы сохранили ExampleTest.php) и введите следующее:

    phpunit --verbose ExampleTest.php
    
  3. Вы должны увидеть:

    PHPUnit 3.4.13 by Sebastian Bergmann.
    
    F
    
    Time: 1 second, Memory: 6.50Mb
    
    There was 1 failure:
    
    1) ExampleTest::testOne
    Failed asserting that <boolean:false> is true.
    
    /var/www/ExampleTest.php:6
    
    FAILURES!
    Tests: 1, Assertions: 1, Failures: 1.
    

Примечания: все вышеперечисленное предполагает, что вы правильно установили phpunit (как указано в главе 3 ) и после этого вы перезапустили apache.

, если вы действительно хотите запускать тесты в своем браузере, используйте следующий код

# error reporting
ini_set('display_errors',1);
error_reporting(E_ALL|E_STRICT);

# include TestRunner
require_once 'PHPUnit/TextUI/TestRunner.php';

# our test class
class ExampleTest extends PHPUnit_Framework_TestCase
{
    public function testOne()
    {
        $this->assertTrue(FALSE);
    }
}

# run the test
$suite = new PHPUnit_Framework_TestSuite('ExampleTest');
PHPUnit_TextUI_TestRunner::run($suite);

Edit

Только что заметил Ubuntu 10.10 в вашем вопросе.Для установки Ubuntu я рекомендую следующее: в терминале выполните:

sudo pear uninstall phpunit/PHPUnit
sudo apt-get install phpunit
sudo /etc/init.d/apache2 restart

Примечание: не вводите первую строку, если вы не установили phpunit через pear.Последняя строка кажется необходимой (по крайней мере, в моем случае).

sudo /etc/init.d/apache2 reload # Or
sudo service apache2 restart
6 голосов
/ 05 января 2011

Добавьте эту строку в php.ini:

include_path=".:/usr/share/php:/usr/share/pear:/usr/share/php/PHPunit:/usr/share/php/PEAR"

Сохраните файл и перезапустите apache.

Также убедитесь, что вы редактировали правильный php.ini.Попробуйте использовать locate php.ini, чтобы найти все места, которые он может скрывать.Обычно это где-то в каталоге /usr.

2 голосов
/ 04 ноября 2010

Убедитесь, что каждый раз, когда вы используете include () или require (), вы ставите перед реальным именем файла dirname(__FILE__).Это гарантирует, что включаемый вами файл находится по указанному вами пути относительно фактического файла, в который входит включение. По умолчанию PHP включает относительно файла, который вызывается для запуска программы.

0 голосов
/ 29 января 2014

Мне удалось заставить его работать, используя set_include_path в верхней части моего скрипта (см. Пример здесь http://www.siteconsortium.com/h/p1.php?id=php002),, а затем мне также пришлось включить его, так как я выполнял тест Selenium, но он работал.

require_once ('PHPUnit/Autoload.php');
require_once 'PHPUnit/Extensions/SeleniumTestCase.php';
...