Почему, Fatal error: Class 'PHPUnit_Framework_TestCase' не найден в …?

Почему я получаю эту ошибку PHP?

Fatal error: Class 'PHPUnit_Framework_TestCase' not found in ... 

В документации PHPUnit говорится, что для включения / использования PHPUnit / Framework.php требуется следующее:

 require_once ('PHPUnit/Framework/TestCase.php'); 

ОБНОВИТЬ

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

 require_once 'PHPUnit/Autoload.php'; 

Спасибо Phoenix за это!

Для тех, кто прибыл сюда после обновления phpunit до версии 6, выпущенной в 2017-02-03 (например, с композитором), вы можете получить эту ошибку, потому что код phpunit теперь заменен на имена (проверьте журнал изменений ). Вам нужно будет реорганизовать такие вещи, как \PHPUnit_Framework_TestCase в \PHPUnit\Framework\TestCase

Вы можете получить эту ошибку, потому что вы указали имя файла. Если это так, вам нужно указать, что PHPUnit_Framework_TestCase находится в глобальном пространстве имен, предшествуя ему обратным слэшем:

 namespace AcmeInc\MyApplication\Tests class StackTest extends \PHPUnit_Framework_TestCase {} 

Я отправил грубый PR, чтобы начать разговор для исправления документации .

Вы можете просто установить PHPUnit для запуска команд ( https://github.com/sebastianbergmann/phpunit/#php-archive-phar ):

 wget https://phar.phpunit.de/phpunit.phar chmod +x phpunit.phar mv phpunit.phar /usr/local/bin/phpunit 

Выполнить одиночный тест

И затем запустите тест PHPunit:

 phpunit test.php 

Содержимое тестового файла:

 <?php class StackTest extends PHPUnit_Framework_TestCase { protected function setUp() { } public function testSave() { } } 

Запустить набор тестов

Конфигурация набора тестов: demosuite.xml. demo – это каталог, содержащий все тесты. Тестовые файлы должны быть названы как *_test.php ( suffix ).

 <testsuites> <testsuite name="DemoTestSuite"> <directory suffix="test.php">demo</directory> </testsuite> </testsuites> во <testsuites> <testsuite name="DemoTestSuite"> <directory suffix="test.php">demo</directory> </testsuite> </testsuites> 

Набор тестов работает со следующими командами:

 phpunit -c demosuite.xml --testsuite DemoTestSuite 

Предположение:

Phpunit (3.7) доступен в консольной среде.

Действие:

Введите следующую команду в консоли:

 SHELL> phpunit "{{PATH TO THE FILE}}" 

Комментарии:

Вам не нужно включать ничего в новые версии PHPUnit, если вы не хотите запускать консоль. Например, запуск тестов в браузере.

Я запускал тесты PHPUnit на PHP5, а затем мне также нужно было поддерживать PHP7. Это то, что я сделал:

В композиторе.json:

 "phpunit/phpunit": "~4.8|~5.7" 

В моем загрузочном файле PHPUnit (в моем случае, /tests/bootstrap.php ):

 // PHPUnit 6 introduced a breaking change that // removed PHPUnit_Framework_TestCase as a base class, // and replaced it with \PHPUnit\Framework\TestCase if (!class_exists('\PHPUnit_Framework_TestCase') && class_exists('\PHPUnit\Framework\TestCase')) class_alias('\PHPUnit\Framework\TestCase', '\PHPUnit_Framework_TestCase'); 

Другими словами, это будет работать для тестов, написанных первоначально для PHPUnit 4 или 5, но затем необходимо работать и с PHPUnit 6.

Если у вас есть Centos или другой дистрибутив Linux, вам нужно установить пакет phpunit, я сделал это с помощью yum install phpunit, и он сработал. Может быть, вам придется добавить репозиторий, но я думаю, что он должен работать плавно с настройками по умолчанию (у меня есть CentOS 7)

Вполне возможно, что вы используете основные тесты WordPress и недавно обновили PhpUnit до версии 6. Если это так, то недавнее изменение пространства имен в PhpUnit нарушит ваш код.

К счастью, есть исправление для основных тестов на https://core.trac.wordpress.org/changeset/40547, которое будет работать над проблемой. Он также включает изменения в travis.yml, которые у вас могут не быть в вашей настройке; если это так, тогда вам нужно будет отредактировать файл .diff, чтобы игнорировать патч Travis.

  1. Загрузите патч «Unified Diff» со страницы https://core.trac.wordpress.org/changeset/40547
  2. Отредактируйте файл патча, чтобы удалить часть Travis патча, если вам это не нужно. Удалите верхнюю часть файла чуть выше этой строки:

     Index: /branches/4.7/tests/phpunit/includes/bootstrap.php 
  3. Сохраните diff в каталоге выше вашего / includes / directory – в моем случае это был сам каталог WordPress

  4. Используйте патч-инструмент Unix для исправления файлов. Вам также необходимо удалить первые несколько косых черт, чтобы перейти от абсолютной к относительной структуре каталогов. Как вы можете видеть из пункта 3 выше, перед каталогом include есть пять слэшей, от которых вам избавится флаг -p5.

     $ cd [WORDPRESS DIRECTORY] $ patch -p5 < changeset_40547.diff 

После того, как я это сделал, мои тесты снова вернулись правильно.

Для более высокой версии phpunit, например 6.4, вы должны использовать пространство имен PHPUnit \ Framework \ TestCase

используйте TestCase вместо PHPUnit_Framework_TestCase

 // use the following namespace use PHPUnit\Framework\TestCase; // extend using TestCase instead PHPUnit_Framework_TestCase class SampleTest extends TestCase { }