Neden bu PHP hatasını alıyorum?
Fatal error: Class 'PHPUnit_Framework_TestCase' not found in ...
Neden bu PHP hatasını alıyorum?
Fatal error: Class 'PHPUnit_Framework_TestCase' not found in ...
Yanıtlar:
PHPUnit dokümantasyon diyor PHPUnit / Framework.php / dahil gerektirecek derdi, aşağıdaki gibi:
require_once ('PHPUnit/Framework/TestCase.php');
GÜNCELLEME
PHPUnit 3.5'ten itibaren, bunu sizin için halledecek yerleşik bir otomatik yükleyici sınıfı vardır:
require_once 'PHPUnit/Autoload.php';
Phoenix'e bunu işaret ettiği için teşekkürler!
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'
İçin güncelleme PHPUnit sonra burada gelenler için sürüm 6 veya daha fazlası 2017/02/03 (örneğin besteci ile birlikte), PHPUnit kod artık isimalanlı çünkü bu hatayı alıyor olabilirsiniz (onay yayınlandı değişmek ).
Sen gibi şeyler gözden geçirmeniz gerekecektir \PHPUnit_Framework_TestCase
için\PHPUnit\Framework\TestCase
İçin daha yüksek sürümü gibi PHPUnit içinde 6.4 Ad alanı kullanmalıdır PHPUnit \ Framework \ TestCase
Kullanım dizge yerine PHPUnit_Framework_TestCase
// use the following namespace
use PHPUnit\Framework\TestCase;
// extend using TestCase instead PHPUnit_Framework_TestCase
class SampleTest extends TestCase {
}
Dosyayı adlandırdığınız için bu hatayı alabilirsiniz. Eğer öyleyse, PHPUnit_Framework_TestCase'in önünde ters eğik çizgi koyarak genel ad alanında olduğunu belirtmeniz gerekir:
namespace AcmeInc\MyApplication\Tests
class StackTest extends \PHPUnit_Framework_TestCase {}
Belgeleri düzeltmek için konuşmaya başlamak için kaba bir PR gönderdim .
class YourNiceTest extends PHPUnit_Framework_TestCase
\ 'ı genişletilmiş sınıfın önüne ekleyin, örneğin class YourNiceTest extends \PHPUnit_Framework_TestCase
- Bu benim için çalıştı, yerel bağımlılık olarak indirilen besteci dosyasını kullanarak Symfony 2.8
ve dahil ederekphpunit
"phpunit/phpunit": "^4.8"
PHP5 üzerinde PHPUnit testleri çalıştırıyordum ve ardından PHP7'yi desteklemem gerekiyordu. Ben de öyle yaptım:
Composer.json içinde:
"phpunit/phpunit": "~4.8|~5.7"
PHPUnit önyükleme dosyamda (benim durumumda /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');
Başka bir deyişle, bu, orijinal olarak PHPUnit 4 veya 5 için yazılmış testler için çalışacaktır, ancak daha sonra PHPUnit 6'da da çalışması gerekir.
Komutları çalıştırmak için basitçe PHPUnit'i kurabilirsiniz ( 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
Tek test çalıştır
Ve sonra PHPunit testini çalıştırın:
phpunit test.php
Test dosyasının içeriği şu şekildedir:
<?php
class StackTest extends PHPUnit_Framework_TestCase
{
protected function setUp()
{
}
public function testSave()
{
}
}
Test paketini çalıştırın
Test paketinin yapılandırması: demosuite.xml. demo
tüm testleri içeren dizindir. Test dosyaları *_test.php
( suffix
) olarak adlandırılmalıdır .
<testsuites>
<testsuite name="DemoTestSuite">
<directory suffix="test.php">demo</directory>
</testsuite>
</testsuites>
Test paketi aşağıdaki komutlarla çalışır:
phpunit -c demosuite.xml --testsuite DemoTestSuite
PHPUnit_Framework_TestCase
. Gerçekten kullanmalısın... extends PHPUnit\Framework\TestCase
mv phpunit /usr/local/bin/phpunit
ve sonra yapmam gerektiğini söylüyorum sudo chmod +x /usr/local/bin/phpunit
. Dosyayı taşımadan önce yürütülebilir olarak ayarlamak, Vagrant Ubuntu'da hiç çalışmadı. Neden olduğuna dair hiçbir fikrim yok ... Ama birisi bununla mücadele ederse, umarım bu yardımcı olur.
Varsayım:
Phpunit (3.7) konsol ortamında mevcuttur.
Aksiyon:
Konsola aşağıdaki komutu girin:
SHELL> phpunit "{{PATH TO THE FILE}}"
Yorumlar:
Konsolda çalıştırmak istemediğiniz sürece PHPUnit'in yeni sürümlerine herhangi bir şey eklemenize gerek yoktur. Örneğin, tarayıcıda testler çalıştırmak.
ZF2 kullanıyorum ve 'PHPUnit_Framework_TestCase' '\ PHPUnit \ Framework \ TestCase' olarak değiştirildiğinde benim için çalışıyorum
Centos veya başka bir Linux dağıtımınız varsa, phpunit paketini kurmanız gerekir, bunu yum install phpunit ile yaptım ve işe yaradı. Belki bir depo eklemeniz gerekebilir, ancak varsayılan olanlarla sorunsuz çalışması gerektiğini düşünüyorum (CentOS 7'ye sahibim)
WordPress çekirdek testlerini çalıştırıyor olabilirsiniz ve yakın zamanda PhpUnit'inizi sürüm 6'ya yükseltmiş olabilirsiniz. Durum böyleyse, PhpUnit'teki ad alanında yapılan son değişiklik kodunuzu bozmuş olacaktır.
Neyse ki, https://core.trac.wordpress.org/changeset/40547 adresindeki temel testler için soruna geçici bir çözüm olacak bir yama var . Ayrıca, kurulumunuzda sahip olmayabileceğiniz travis.yml'de yapılan değişiklikleri de içerir; durum buysa, Travis yamasını yok saymak için .diff dosyasını düzenlemeniz gerekir.
İhtiyacınız yoksa yamanın Travis bölümünü kaldırmak için yama dosyasını düzenleyin. Dosyanın üstünden bu satırın hemen üstüne kadar silin:
Index: /branches/4.7/tests/phpunit/includes/bootstrap.php
Diff'i / içerir / dizininizin üzerindeki dizine kaydedin - benim durumumda bu Wordpress dizininin kendisiydi
Dosyaları yamalamak için Unix yama aracını kullanın. Mutlak bir dizin yapısından göreceli bir dizin yapısına geçmek için ilk birkaç eğik çizgiyi de çıkarmanız gerekir. Yukarıdaki 3. noktadan da görebileceğiniz gibi, include dizininden önce -p5 bayrağının sizin için ortadan kaldıracağı beş eğik çizgi vardır.
$ cd [WORDPRESS DIRECTORY]
$ patch -p5 < changeset_40547.diff
Bunu yaptıktan sonra testlerim tekrar doğru çalıştı.
DİKKAT: Komut php bin/console generate:doctrine:crud
ayrıca oluşturmak TestController
içinde src/Tests
size yoksa sunucuyu başlatmak çalıştığında hata atabilir böylece UnitTests
. Dosyayı kaldırın, düzeltin!