Dlaczego otrzymuję ten błąd PHP?
Fatal error: Class 'PHPUnit_Framework_TestCase' not found in ...
Dlaczego otrzymuję ten błąd PHP?
Fatal error: Class 'PHPUnit_Framework_TestCase' not found in ...
Odpowiedzi:
Dokumentacja PHPUnit mówi, że zawiera / wymaga PHPUnit / Framework.php, w następujący sposób:
require_once ('PHPUnit/Framework/TestCase.php');
AKTUALIZACJA
Od PHPUnit 3.5 jest wbudowana klasa autoloadera, która zajmie się tym za Ciebie:
require_once 'PHPUnit/Autoload.php';
Dzięki dla Phoenix za wskazanie tego!
require_once 'PHPUnit/Autoload.php'
PHPUnit/Autoload.php
i PHPUnit/Framework/TestCase.php
mój folder jest coś w rodzajuPHPUnit/Framework/MockObject
PHP Fatal error: require_once(): Failed opening required 'PHPUnit/Autoload.php'
Dla tych, którzy przyjeżdżają tutaj po aktualizacji phpunita do wersji 6 lub nowszej wydanej w dniu 2017-02-03 (np. W przypadku programu composer), może pojawić się ten błąd, ponieważ kod phpunita ma teraz przestrzeń nazw (sprawdź dziennik zmian ).
Trzeba będzie byłaby rzeczy, jak \PHPUnit_Framework_TestCase
na\PHPUnit\Framework\TestCase
W przypadku wyższej wersji phpunita, takiej jak 6.4, musisz użyć przestrzeni nazw PHPUnit \ Framework \ TestCase
użyj TestCase zamiast PHPUnit_Framework_TestCase
// use the following namespace
use PHPUnit\Framework\TestCase;
// extend using TestCase instead PHPUnit_Framework_TestCase
class SampleTest extends TestCase {
}
Możesz otrzymać ten błąd, ponieważ utworzyłeś przestrzeń nazw pliku. Jeśli tak, musisz określić, że PHPUnit_Framework_TestCase znajduje się w globalnej przestrzeni nazw, poprzedzając ją odwrotnym ukośnikiem:
namespace AcmeInc\MyApplication\Tests
class StackTest extends \PHPUnit_Framework_TestCase {}
Złożyłem prymitywny PR, aby rozpocząć rozmowę o poprawieniu dokumentacji .
class YourNiceTest extends PHPUnit_Framework_TestCase
po prostu dodaj \ przed klasą rozszerzoną, jak w class YourNiceTest extends \PHPUnit_Framework_TestCase
- To zadziałało dla mnie, używając Symfony 2.8
i włączając do phpunit
pliku kompozytora pobranego jako zależność lokalna z"phpunit/phpunit": "^4.8"
Przeprowadzałem testy PHPUnit na PHP5, a potem musiałem również obsługiwać PHP7. Oto co zrobiłem:
W pliku composer.json:
"phpunit/phpunit": "~4.8|~5.7"
W moim pliku bootstrap PHPUnit (w moim przypadku /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');
Innymi słowy, zadziała to w przypadku testów napisanych pierwotnie dla PHPUnit 4 lub 5, ale później również potrzebne do pracy z PHPUnit 6.
Możesz po prostu zainstalować PHPUnit, aby uruchamiać polecenia ( 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
Uruchom pojedynczy test
Następnie uruchom test PHPunit:
phpunit test.php
Zawartość pliku testowego jest następująca:
<?php
class StackTest extends PHPUnit_Framework_TestCase
{
protected function setUp()
{
}
public function testSave()
{
}
}
Uruchom zestaw testów
Konfiguracja zestawu testów: demosuite.xml. demo
to katalog zawierający wszystkie testy. Pliki testowe muszą mieć nazwę *_test.php
( suffix
).
<testsuites>
<testsuite name="DemoTestSuite">
<directory suffix="test.php">demo</directory>
</testsuite>
</testsuites>
Zestaw testów działa z następującymi poleceniami:
phpunit -c demosuite.xml --testsuite DemoTestSuite
PHPUnit_Framework_TestCase
. Naprawdę musisz użyć... extends PHPUnit\Framework\TestCase
mv phpunit /usr/local/bin/phpunit
a potem sudo chmod +x /usr/local/bin/phpunit
. Ustawienie pliku jako wykonywalnego przed przeniesieniem nigdy nie działało na Vagrant Ubuntu. Nie mam pojęcia, dlaczego ... Ale na wypadek, gdyby ktoś się z tym zmagał, mam nadzieję, że to pomoże.
Założenie:
Phpunit (3.7) jest dostępny w środowisku konsoli.
Akcja:
Wpisz w konsoli następującą komendę:
SHELL> phpunit "{{PATH TO THE FILE}}"
Uwagi:
Nie musisz niczego dołączać do nowych wersji PHPUnit, chyba że nie chcesz działać w konsoli. Na przykład uruchamianie testów w przeglądarce.
Używam ZF2 i pracuję dla mnie po zastąpieniu „PHPUnit_Framework_TestCase” na „\ PHPUnit \ Framework \ TestCase”
Jeśli masz Centosa lub inną dystrybucję Linuksa, musisz zainstalować pakiet phpunit, zrobiłem to za pomocą yum install phpunit i zadziałało. Może trzeba będzie dodać repozytorium, ale myślę, że musi działać płynnie z domyślnymi (mam CentOS 7)
Możliwe, że przeprowadzasz podstawowe testy WordPress i niedawno zaktualizowałeś swój PhpUnit do wersji 6. Jeśli tak jest, to ostatnia zmiana w przestrzeni nazw w PhpUnit zepsuje twój kod.
Na szczęście na https://core.trac.wordpress.org/changeset/40547 dostępna jest łatka do podstawowych testów, która obejdzie problem. Zawiera także zmiany w travis.yml, których możesz nie mieć w swojej konfiguracji; jeśli tak jest, musisz edytować plik .diff, aby zignorować poprawkę Travisa.
Edytuj plik poprawki, aby usunąć część Travisa z łatki, jeśli tego nie potrzebujesz. Usuń od początku pliku do miejsca tuż nad tą linią:
Index: /branches/4.7/tests/phpunit/includes/bootstrap.php
Zapisz różnicę w katalogu nad katalogiem / obejmuje / - w moim przypadku był to sam katalog Wordpress
Użyj narzędzia łatki Unix, aby załatać pliki. Będziesz także musiał usunąć kilka pierwszych ukośników, aby przejść z bezwzględnej do względnej struktury katalogów. Jak widać z punktu 3 powyżej, przed katalogiem include znajduje się pięć ukośników, których flaga -p5 zostanie usunięta.
$ cd [WORDPRESS DIRECTORY]
$ patch -p5 < changeset_40547.diff
Po wykonaniu tej czynności moje testy ponownie przebiegły poprawnie.
UWAGA: Polecenie php bin/console generate:doctrine:crud
również tworzy TestController
w, src/Tests
więc może zgłaszać błąd podczas próby uruchomienia serwera, jeśli go nie masz UnitTests
. Usuń plik, napraw to!