Почему, фатальная ошибка: класс 'PHPUnit Framework TestCase' не найден в ...?
почему я получаю эту ошибку PHP?
Fatal error: Class 'PHPUnit_Framework_TestCase' not found in ...
10 ответов
на документация PHPUnit говорит используется для включения/требования PHPUnit/Framework.php, следующим образом:
require_once ('PHPUnit/Framework/TestCase.php');
обновление
начиная с PHPUnit 3.5, есть встроенный класс автозапуска, который будет обрабатывать это для вас:
require_once 'PHPUnit/Autoload.php';
спасибо Phoenix за указание на это!
для тех, кто прибывает сюда после обновления phpunit до версия 6 или выше выпущенный на 2017-02-03 (например, с composer), вы можете получить эту ошибку, потому что код phpunit теперь находится в пространстве имен (проверьте изменений).
вам потребуется рефакторинг вещи, как \PHPUnit_Framework_TestCase
до \PHPUnit\Framework\TestCase
на более высокая версия 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 {
}
вы можете получить эту ошибку, потому что вы пространство имен файла. Если это так, вам нужно будет указать, что PHPUnit_Framework_TestCase находится в глобальном пространстве имен, предшествуя ему обратной косой чертой:
namespace AcmeInc\MyApplication\Tests
class StackTest extends \PHPUnit_Framework_TestCase {}
представил грубый PR начать разговор для исправления документация.
я запускал тесты PHPUnit на PHP5,а затем мне нужно было поддерживать PHP7. Вот что я сделал:--4-->
В композитора.в 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.
вы можете просто установить 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>
Test suite работает со следующими командами:
phpunit -c demosuite.xml --testsuite DemoTestSuite
предположения:
Phpunit (3.7) доступно в среде консоли.
действие:
введите в консоли следующую команду:
SHELL> phpunit "{{PATH TO THE FILE}}"
комментарии:
вам не нужно ничего включать в новые версии PHPUnit, если вы не хотите работать в консоли. Например, запуск тестов в браузере.
Если у вас есть Centos или другой дистрибутив Linux, вам нужно установить пакет phpunit, я сделал это с помощью yum install phpunit, и это сработало. Возможно, вам придется добавить репозиторий, но я думаю, что он должен работать гладко с теми, кто по умолчанию (у меня есть CentOS 7)
вполне возможно, что вы используете тесты ядра WordPress и недавно обновили свой PhpUnit до версии 6. Если это так, то недавнее изменение пространства имен в PhpUnit нарушит ваш код.
к счастью, есть патч для основных тестов в https://core.trac.wordpress.org/changeset/40547 который будет работать вокруг проблемы. Он также включает изменения в travis.yml, которого у вас может не быть в вашей настройке; если это так, то вам понадобится для редактирования .diff файл, чтобы игнорировать патч Трэвиса.
- скачать патч "Единой дифф" со дна https://core.trac.wordpress.org/changeset/40547
-
отредактируйте файл патча, чтобы удалить часть патча Travis, если вам это не нужно. Удалите из верхней части файла чуть выше этой строки:
Index: /branches/4.7/tests/phpunit/includes/bootstrap.php
сохраните diff в каталоге над вашим каталогом/ includes / - в моем случае это было Сам каталог Wordpress
-
используйте инструмент исправления Unix для исправления файлов. Вам также нужно будет удалить первые несколько косых черт, чтобы перейти от абсолютной к относительной структуре каталогов. Как вы можете видеть из пункта 3 выше, перед каталогом include есть пять косых черт, от которых флаг a-p5 избавится для вас.
$ cd [WORDPRESS DIRECTORY] $ patch -p5 < changeset_40547.diff
после того, как я сделал это, мои тесты снова прошли правильно.
Я использую ZF2 и работаю для меня при замене "PHPUnit_Framework_TestCase" на "\PHPUnit\Framework\TestCase"