Почему я получаю эту ошибку 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.
Отредактируйте файл патча, чтобы удалить часть Travis патча, если вам это не нужно. Удалите верхнюю часть файла чуть выше этой строки:
Index: /branches/4.7/tests/phpunit/includes/bootstrap.php
Сохраните diff в каталоге выше вашего / includes / directory – в моем случае это был сам каталог WordPress
Используйте патч-инструмент 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 { }