Чому я отримую цю помилку 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 або новішої, випущеної 2017-02-03 (наприклад, з композитором), ви можете отримати цю помилку, оскільки код 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. Не знаю, чому ... Але якщо хтось із цим бореться, я сподіваюся, що це допоможе.
Я використовую 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.
Відредагуйте файл патча, щоб видалити частину патча, якщо вам це не потрібно. Видаліть зверху файлу трохи вище цього рядка:
Index: /branches/4.7/tests/phpunit/includes/bootstrap.php
Збережіть різницю в каталозі над вашим / include / каталогом - у моєму випадку це був сам каталог Wordpress
Використовуйте інструмент патчу Unix для виправлення файлів. Вам також знадобиться зняти перші кілька косої риски, щоб перейти від абсолютної до відносної структури каталогів. Як видно з пункту 3 вище, перед каталогом include є п'ять косої риски, яка прапором -p5 позбудеться для вас.
$ cd [WORDPRESS DIRECTORY]
$ patch -p5 < changeset_40547.diff
Після того як я це зробив, мої тести знову запустилися правильно.
УВАГА: Команда php bin/console generate:doctrine:crud
також створити TestController
в src/Tests
так що він може кинути помилку при спробі запустити сервер , якщо у вас немає UnitTests
. Видаліть файл виправити!
Я використовую php 5.6 у вікні 10 із додаванням для мене версії zend 1,12
need_once 'PHPUnit / Autoload.php';
раніше
абстрактний клас Zend_Test_PHPUnit_ControllerTestCase розширює PHPUnit_Framework_TestCase
працювали. Нам потрібно додати це вище твердження у файл ControllerTestCase.php