Почему я получаю эту ошибку PHP?
Fatal error: Class 'PHPUnit_Framework_TestCase' not found in ...
Почему я получаю эту ошибку 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 за указание на это!
require_once 'PHPUnit/Autoload.php'
PHPUnit/Autoload.php
и того PHPUnit/Framework/TestCase.php
, и другого, и моя папка вроде какPHPUnit/Framework/MockObject
PHP Fatal error: require_once(): Failed opening required 'PHPUnit/Autoload.php'
Для тех, кто прибыл сюда после обновления phpunit до версии 6 или выше, выпущенной 03.02.2017 (например, с помощью 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 {}
Я отправил грубый пиар, чтобы начать разговор об исправлении документации .
class YourNiceTest extends PHPUnit_Framework_TestCase
просто добавьте \ перед расширенным классом, как в class YourNiceTest extends \PHPUnit_Framework_TestCase
- Это сработало для меня, используя Symfony 2.8
и включая phpunit
в файл композитора, загруженный как локальную зависимость с"phpunit/phpunit": "^4.8"
Я запускал тесты PHPUnit на PHP5, а потом мне также понадобилась поддержка PHP7. Вот что я сделал:
В composer.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>
Набор тестов запускается со следующими командами:
phpunit -c demosuite.xml --testsuite DemoTestSuite
PHPUnit_Framework_TestCase
. Вы действительно должны использовать... extends PHPUnit\Framework\TestCase
mv phpunit /usr/local/bin/phpunit
а потом sudo chmod +x /usr/local/bin/phpunit
. Установка файла в качестве исполняемого перед перемещением никогда не работала на Vagrant Ubuntu. Понятия не имею, почему ... Но если кто-то борется с этим, я надеюсь, что это поможет.
Предположение:
Phpunit (3.7) доступен в консольной среде.
Действие:
Введите в консоль следующую команду:
SHELL> phpunit "{{PATH TO THE FILE}}"
Комментарии:
Вам не нужно ничего включать в новые версии PHPUnit, если только вы не хотите запускать в консоли. Например, запуск тестов в браузере.
Я использую ZF2 и работаю на меня, когда заменил PHPUnit_Framework_TestCase на \ PHPUnit \ Framework \ TestCase
Если у вас есть 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
Сохраните разницу в каталоге над вашим каталогом / includes / - в моем случае это был каталог Wordpress.
Используйте инструмент исправлений Unix для исправления файлов. Вам также необходимо убрать первые несколько косых черт, чтобы перейти от абсолютной к относительной структуре каталогов. Как видно из пункта 3 выше, перед каталогом include есть пять косых черт, от которых можно избавиться с помощью флага -p5.
$ cd [WORDPRESS DIRECTORY]
$ patch -p5 < changeset_40547.diff
После этого мои тесты снова прошли правильно.
ВНИМАНИЕ: Команда php bin/console generate:doctrine:crud
также создает TestController
в, src/Tests
поэтому она может выдать ошибку при попытке запустить сервер, если у вас ее нет UnitTests
. Удалите файл, исправьте!