Почему, фатальная ошибка: класс '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 файл, чтобы игнорировать патч Трэвиса.

  1. скачать патч "Единой дифф" со дна https://core.trac.wordpress.org/changeset/40547
  2. отредактируйте файл патча, чтобы удалить часть патча Travis, если вам это не нужно. Удалите из верхней части файла чуть выше этой строки:

    Index: /branches/4.7/tests/phpunit/includes/bootstrap.php
    
  3. сохраните diff в каталоге над вашим каталогом/ includes / - в моем случае это было Сам каталог Wordpress

  4. используйте инструмент исправления Unix для исправления файлов. Вам также нужно будет удалить первые несколько косых черт, чтобы перейти от абсолютной к относительной структуре каталогов. Как вы можете видеть из пункта 3 выше, перед каталогом include есть пять косых черт, от которых флаг a-p5 избавится для вас.

    $ cd [WORDPRESS DIRECTORY]
    $ patch -p5 < changeset_40547.diff 
    

после того, как я сделал это, мои тесты снова прошли правильно.


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