Чому, фатальна помилка: Клас 'PHPUnit_Framework_TestCase' не знайдено у…?


127

Чому я отримую цю помилку PHP?

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

9
Ви взагалі не надаєте жодної інформації.
Pekka

Запустіть тести за допомогою командного рядка phpunit. Він завантажує необхідні класи.
Полустоп

Ви також можете використовувати відповідь із наведеної нижче відповіді stackoverflow.com/questions/42811164/…, щоб зберегти свій код сумісним з PHPUnit 6, а також з більш ранніми версіями.
Робсон

Відповіді:


73

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

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

ОНОВЛЕННЯ

Станом на PHPUnit 3.5, існує вбудований клас автозавантажувачів, який буде обробляти це за вас:

require_once 'PHPUnit/Autoload.php';

Дякуємо Phoenix за вказівку на це!


14
PHPUnit 3.5 оснащений власним автозавантажувачем, який може допомогти зробити прості речі: require_once 'PHPUnit/Autoload.php'

1
Я погоджуюся, що Requ_once ('PHPUnit / Autoload.php') - найкраща практика.
Пола Пола

1
У мене немає обох, PHPUnit/Autoload.phpі PHPUnit/Framework/TestCase.phpмоя папка схожа наPHPUnit/Framework/MockObject
Sufendy,

4
а тепер у мене PHP Fatal error: require_once(): Failed opening required 'PHPUnit/Autoload.php'
Денніс

1
дивіться відповідь @ shadi для PHP 6+ stackoverflow.com/a/42561590/2883328
Dennis

237

Для тих, хто приїжджає сюди після оновлення phpunit до версії 6 або новішої, випущеної 2017-02-03 (наприклад, з композитором), ви можете отримати цю помилку, оскільки код phpunit тепер проміжок імен (перевірте журнал змін ).

Вам потрібно буде реорганізувати речі , як \PHPUnit_Framework_TestCaseдо\PHPUnit\Framework\TestCase


4
Дякую, у мене виникла ця проблема через Travis CI, що використовував найновішу версію PHPUnit у своїх PHP 7-версіях. Моє виправлення полягало в тому, щоб вручну завантажити старий phar і використовувати його замість цього.
НезадоволенеЗабез

2
github.com/sebastianbergmann/phpunit/wiki/… знаходиться на вершині нотаток до випуску, але я пропустив це
Qchmqs

Дякую вам, добрий пане. Я дійсно приїжджаю сюди після оновлення до версії 6.
h4ckNinja

Мене дуже дратувало, що мої тести раптом перестали працювати. Я зробив оновлення композитора, і це оновило PHPunit до 6.1. Спасибі.
Джед Лінч

38

Для вищої версії 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 {

}

Чудово це спрацювало для мене, коли я дотримувався старого підручника

Ви щойно скопіювали відповідь шаді
Адам

@Адам хто шаді?
Jijesh Cherrai

Я такого не знаю. Я отримав таку ж помилку, то
вивчаю відповідь, зламаючи

13

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

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

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


1
Так, якщо ви зробили це: class YourNiceTest extends PHPUnit_Framework_TestCaseпросто додайте \ перед розширеним класом, як у class YourNiceTest extends \PHPUnit_Framework_TestCase- Це працювало для мене, використовуючи Symfony 2.8та включаючи phpunitфайл композитора, завантажений як локальна залежність,"phpunit/phpunit": "^4.8"
Xavi Montero

12

Я виконував тести 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.


1
це рішення важливе, якщо ви не хочете торкатися Civi \ Test коду, але вам потрібен сумісний з найновішим тестом на php-модулі на основі простору імен
Shahadat Hossain Khan

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

3
Це більше не працює, оскільки пізні PHPUnit більше не підтримує старих імен класів, таких як PHPUnit_Framework_TestCase. Вам справді потрібно скористатися... extends PHPUnit\Framework\TestCase
Mikko Rantalainen

Просто кажу, що я повинен був спочатку, mv phpunit /usr/local/bin/phpunitа потім sudo chmod +x /usr/local/bin/phpunit. Налаштування файлу як виконуваного перед його переміщенням ніколи не працювало на Vagrant Ubuntu. Не знаю, чому ... Але якщо хтось із цим бореться, я сподіваюся, що це допоможе.
Джордж Мілонас

4

Припущення:

Phpunit (3.7) доступний у консольному середовищі.

Дія:

Введіть таку команду в консоль:

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

Коментарі:

Вам не потрібно нічого включати в нові версії PHPUnit, якщо ви не хочете працювати в консолі. Наприклад, запуск тестів у браузері.



0

Якщо у вас є Centos або інший дистрибутив Linux, вам доведеться встановити пакет phpunit, я зробив це з yum install phpunit, і це спрацювало. Можливо, вам доведеться додати сховище, але я думаю, він повинен працювати з типовими (у мене CentOS 7)


0

Цілком можливо, що ви виконуєте основні тести WordPress і нещодавно оновили ваш PhpUnit до версії 6. Якщо це так, то нещодавна зміна простору імен у PhpUnit порушить ваш код.

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

  1. Завантажте патч "Уніфікована різниця" знизу https://core.trac.wordpress.org/changeset/40547
  2. Відредагуйте файл патча, щоб видалити частину патча, якщо вам це не потрібно. Видаліть зверху файлу трохи вище цього рядка:

    Index: /branches/4.7/tests/phpunit/includes/bootstrap.php
  3. Збережіть різницю в каталозі над вашим / include / каталогом - у моєму випадку це був сам каталог Wordpress

  4. Використовуйте інструмент патчу Unix для виправлення файлів. Вам також знадобиться зняти перші кілька косої риски, щоб перейти від абсолютної до відносної структури каталогів. Як видно з пункту 3 вище, перед каталогом include є п'ять косої риски, яка прапором -p5 позбудеться для вас.

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

Після того як я це зробив, мої тести знову запустилися правильно.


0

УВАГА: Команда php bin/console generate:doctrine:crudтакож створити TestControllerв src/Testsтак що він може кинути помилку при спробі запустити сервер , якщо у вас немає UnitTests. Видаліть файл виправити!


0

Для мене це було тому, що я бігав

$ phpunit .

замість

$ phpunit

коли я вже мав налаштований phpunit.xmlфайл у робочому каталозі.


0

Я використовую php 5.6 у вікні 10 із додаванням для мене версії zend 1,12

need_once 'PHPUnit / Autoload.php';

раніше

абстрактний клас Zend_Test_PHPUnit_ControllerTestCase розширює PHPUnit_Framework_TestCase

працювали. Нам потрібно додати це вище твердження у файл ControllerTestCase.php

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.