Почему я получаю эту ошибку 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');
UPDATE
Как и в PHPUnit 3.5, есть встроенный класс автозагрузчика, который будет обрабатывать это для вас:
require_once 'PHPUnit/Autoload.php';
Спасибо Phoenix за это!
Для тех, кто прибывает сюда после обновления phpunit до версии 6 или выше, выпущенной 2017-02-03 (например, с помощью composer), вы можете получить эту ошибку, потому что код phpunit теперь находится в пространстве имен (проверьте журнал изменений).
Вам нужно будет \PHPUnit_Framework_TestCase
рефакторинг таких вещей, как \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. Это то, что я сделал:
В 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 (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, чтобы игнорировать патч 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
После этого мои тесты снова запущены правильно.
ВНИМАНИЕ: Команда php bin/console generate:doctrine:crud
также создает TestController
в src/Tests
чтобы он мог TestController
ошибку при попытке запустить сервер, если у вас нет UnitTests
. Удалить файл исправить это!
Я использую php 5.6 в окне 10 с версией Zend 1.12 для меня добавив
require_once 'PHPUnit/Autoload.php';
Перед
абстрактный класс Zend_Test_PHPUnit_ControllerTestCase extends PHPUnit_Framework_TestCase
работал. Нам нужно добавить этот оператор в файле ControllerTestCase.php
Я использую ZF2 и работаю для меня, когда меняю 'PHPUnit_Framework_TestCase' на '\ PHPUnit\Framework\TestCase'
Для меня это было потому, что я побежал
$ phpunit .
вместо
$ phpunit
когда у меня уже был настроенный файл phpunit.xml
в рабочем каталоге.
Короткая и сладкая; это работает для меня:
PHP ping
функция
function ping($host){
$start=microtime(true);
[email protected]($host, 80, $errno, $errstr, 10);
return (!$fp?'(Unknown)': round((microtime(true)-$start)*1000));
}
Использование:
ping('google.com');