Neden, Önemli hata: 'PHPUnit_Framework_TestCase' Sınıfı ... içinde bulunamadı?


127

Neden bu PHP hatasını alıyorum?

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

9
Hiçbir bilgi sağlamıyorsunuz.
Pekka

Testlerinizi phpunit komut satırı aracılığıyla çalıştırın. Gerekli sınıfları yükler.
Halfstop

Kodunuzun PHPUnit 6 ve önceki sürümlerle uyumlu olmasını sağlamak için aşağıdaki yanıt stackoverflow.com/questions/42811164/… 'deki yanıtı da kullanabilirsiniz .
Robson

Yanıtlar:


73

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!


14
PHPUnit 3.5, işleri basit tutmaya yardımcı olabilecek kendi otomatik yükleyicisiyle birlikte gelir: require_once 'PHPUnit/Autoload.php'

1
Required_once ('PHPUnit / Autoload.php') 'nin en iyi uygulama olduğu konusunda hemfikirim.
Paul Maidment

1
PHPUnit/Autoload.phpPHPUnit/Framework/TestCase.phpPHPUnit/Framework/MockObject
İkisine

4
ve şimdi var PHP Fatal error: require_once(): Failed opening required 'PHPUnit/Autoload.php'
Dennis


237

İç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_TestCaseiçin\PHPUnit\Framework\TestCase


4
Teşekkürler, PHP 7 sürümlerinde en son PHPUnit sürümünü kullanan Travis CI nedeniyle bu sorunu yaşadım. Benim düzeltmem eski bir phar'ı manuel olarak indirmek ve onun yerine kullanmaktı.
DisgruntledGoat

2
github.com/sebastianbergmann/phpunit/wiki/… sürüm notlarının üstünde, yine de kaçırdım
Qchmqs

Nazikçe teşekkür ederim, bayım. Gerçekten 6 sürümüne yükselttikten sonra buraya
geliyorum

Testlerimin birdenbire çalışmayı bırakması beni gerçekten sinirlendiriyordu. Bir besteci güncellemesi yaptım ve PHP birimimi 6.1'e güncelledim. Teşekkür ederim.
Jed Lynch

38

İç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 {

}

Eski bir öğreticiyi takip ederken bu benim için mükemmel çalıştı

az önce shadi'nin cevabını kopyaladınız
Adam

@Adam shadi kimdir?
Jijesh Cherrai

Ben böyle bir şey bilmiyorum. Aynı hatayı aldım ve sonra paketi
kırarak

13

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 .


1
Evet, eğer bunu yaptıysanız: 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.8ve dahil ederekphpunit"phpunit/phpunit": "^4.8"
Xavi Montero

12

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.


1
Civi \ Test koduna dokunmak istemiyorsanız ancak en son ad alanı tabanlı php birim testi ile uyumlu olmanız gerekiyorsa bu çözüm önemlidir
Shahadat Hossain Khan

6

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. demotü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

3
Bu artık çalışmıyor, çünkü en son PHPUnit artık PHPUnit_Framework_TestCase. Gerçekten kullanmalısın... extends PHPUnit\Framework\TestCase
Mikko Rantalainen

Sadece önce mv phpunit /usr/local/bin/phpunitve 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.
George Mylonas

4

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.


1

ZF2 kullanıyorum ve 'PHPUnit_Framework_TestCase' '\ PHPUnit \ Framework \ TestCase' olarak değiştirildiğinde benim için çalışıyorum


0

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)


0

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.

  1. Https://core.trac.wordpress.org/changeset/40547 altından "Birleştirilmiş Diff" yamasını indirin
  2. İ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
  3. Diff'i / içerir / dizininizin üzerindeki dizine kaydedin - benim durumumda bu Wordpress dizininin kendisiydi

  4. 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ı.


0

DİKKAT: Komut php bin/console generate:doctrine:crudayrıca oluşturmak TestControlleriçinde src/Testssize yoksa sunucuyu başlatmak çalıştığında hata atabilir böylece UnitTests. Dosyayı kaldırın, düzeltin!


0

Benim için koştuğum için

$ phpunit .

onun yerine

$ phpunit

phpunit.xmlçalışma dizininde zaten yapılandırılmış bir dosyam olduğunda .


0

Eklemek için zend 1.12 sürümü ile pencere 10'da php 5.6 kullanıyorum

require_once 'PHPUnit / Autoload.php';

önce

soyut sınıf Zend_Test_PHPUnit_ControllerTestCase PHPUnit_Framework_TestCase'i genişletir

çalıştı. Yukarıdaki ifadeyi ControllerTestCase.php dosyasına eklememiz gerekiyor

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.