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

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

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

Ответ 1

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

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

UPDATE

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

require_once 'PHPUnit/Autoload.php';

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

Ответ 2

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

Вам нужно будет \PHPUnit_Framework_TestCase рефакторинг таких вещей, как \PHPUnit_Framework_TestCase в \PHPUnit\Framework\TestCase

Ответ 3

Для более высокой версии 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 {

}

Ответ 4

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

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

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

Ответ 5

Я запускал тесты 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.

Ответ 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

Ответ 7

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

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

Действие:

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

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

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

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

Ответ 8

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

Ответ 9

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

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

  • Загрузите патч "Unified Diff" снизу https://core.trac.wordpress.org/changeset/40547
  • Отредактируйте файл исправления, чтобы удалить часть тревиса в 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 
    

После этого мои тесты снова запущены правильно.

Ответ 10

ВНИМАНИЕ: Команда php bin/console generate:doctrine:crud также создает TestController в src/Tests чтобы он мог TestController ошибку при попытке запустить сервер, если у вас нет UnitTests. Удалить файл исправить это!

Ответ 11

Я использую php 5.6 в окне 10 с версией Zend 1.12 для меня добавив

require_once 'PHPUnit/Autoload.php';

Перед

абстрактный класс Zend_Test_PHPUnit_ControllerTestCase extends PHPUnit_Framework_TestCase

работал. Нам нужно добавить этот оператор в файле ControllerTestCase.php

Ответ 12

Я использую ZF2 и работаю для меня, когда меняю 'PHPUnit_Framework_TestCase' на '\ PHPUnit\Framework\TestCase'

Ответ 13

Для меня это было потому, что я побежал

$ phpunit .

вместо

$ phpunit

когда у меня уже был настроенный файл phpunit.xml в рабочем каталоге.

Ответ 14

Короткая и сладкая; это работает для меня:

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');