Kenapa saya mendapatkan kesalahan PHP ini?
Fatal error: Class 'PHPUnit_Framework_TestCase' not found in ...
Kenapa saya mendapatkan kesalahan PHP ini?
Fatal error: Class 'PHPUnit_Framework_TestCase' not found in ...
Jawaban:
The dokumentasi PHPUnit mengatakan digunakan untuk mengatakan untuk menyertakan / membutuhkan PHPUnit / Framework.php, sebagai berikut:
require_once ('PHPUnit/Framework/TestCase.php');
MEMPERBARUI
Pada PHPUnit 3.5, ada kelas autoloader bawaan yang akan menangani ini untuk Anda:
require_once 'PHPUnit/Autoload.php';
Terima kasih kepada Phoenix karena telah menunjukkan ini!
require_once 'PHPUnit/Autoload.php'
PHPUnit/Autoload.php
dan PHPUnit/Framework/TestCase.php
, folder saya sepertiPHPUnit/Framework/MockObject
PHP Fatal error: require_once(): Failed opening required 'PHPUnit/Autoload.php'
Bagi mereka yang tiba di sini setelah memperbarui phpunit ke versi 6 atau lebih besar dirilis pada 2017-02-03 (mis. Dengan komposer), Anda mungkin mendapatkan kesalahan ini karena kode phpunit sekarang namespaced (periksa changelog ).
Anda akan perlu untuk refactor hal-hal seperti \PHPUnit_Framework_TestCase
untuk\PHPUnit\Framework\TestCase
Untuk versi phpunit yang lebih tinggi seperti 6.4 Anda harus menggunakan namespace PHPUnit \ Framework \ TestCase
gunakan TestCase sebagai gantinya PHPUnit_Framework_TestCase
// use the following namespace
use PHPUnit\Framework\TestCase;
// extend using TestCase instead PHPUnit_Framework_TestCase
class SampleTest extends TestCase {
}
Anda mungkin mendapatkan kesalahan ini karena Anda menempatkan file di tempat. Jika demikian, Anda harus menentukan bahwa PHPUnit_Framework_TestCase ada di namespace global dengan mendahului dengan backslash:
namespace AcmeInc\MyApplication\Tests
class StackTest extends \PHPUnit_Framework_TestCase {}
Saya mengirimkan PR kasar untuk memulai percakapan untuk memperbaiki dokumentasi .
class YourNiceTest extends PHPUnit_Framework_TestCase
tambahkan saja \ di depan kelas yang diperluas, seperti di class YourNiceTest extends \PHPUnit_Framework_TestCase
- Ini berfungsi untuk saya, menggunakan Symfony 2.8
dan termasuk phpunit
dalam file komposer yang diunduh sebagai ketergantungan lokal dengan"phpunit/phpunit": "^4.8"
Saya menjalankan tes PHPUnit di PHP5, dan kemudian, saya perlu mendukung PHP7 juga. Inilah yang saya lakukan:
Dalam composer.json:
"phpunit/phpunit": "~4.8|~5.7"
Dalam file bootstrap PHPUnit saya (dalam kasus saya, /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');
Dengan kata lain, ini akan berfungsi untuk tes yang awalnya ditulis untuk PHPUnit 4 atau 5, tetapi kemudian harus bekerja pada PHPUnit 6 juga.
Anda cukup menginstal PHPUnit untuk menjalankan perintah ( 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
Jalankan tes tunggal
Dan kemudian jalankan uji PHPunit:
phpunit test.php
Isi file uji adalah sebagai berikut:
<?php
class StackTest extends PHPUnit_Framework_TestCase
{
protected function setUp()
{
}
public function testSave()
{
}
}
Jalankan test suite
Konfigurasi suite tes: demosuite.xml. demo
adalah direktori yang berisi semua tes. File uji harus dinamai sebagai *_test.php
( suffix
).
<testsuites>
<testsuite name="DemoTestSuite">
<directory suffix="test.php">demo</directory>
</testsuite>
</testsuites>
Test suite dijalankan dengan perintah berikut:
phpunit -c demosuite.xml --testsuite DemoTestSuite
PHPUnit_Framework_TestCase
. Anda benar-benar harus menggunakan... extends PHPUnit\Framework\TestCase
mv phpunit /usr/local/bin/phpunit
dan kemudian sudo chmod +x /usr/local/bin/phpunit
. Mengatur file sebagai executable sebelum memindahkannya tidak pernah bekerja di Vagrant Ubuntu. Tidak tahu kenapa ... Tapi kalau-kalau ada yang berjuang dengan ini, saya harap ini akan membantu.
Anggapan:
Phpunit (3.7) tersedia di lingkungan konsol.
Tindakan:
Masukkan perintah berikut di konsol:
SHELL> phpunit "{{PATH TO THE FILE}}"
Komentar:
Anda tidak perlu memasukkan apa pun dalam versi baru PHPUnit kecuali Anda tidak ingin menjalankannya di konsol. Misalnya, menjalankan tes di browser.
Saya menggunakan ZF2 dan berfungsi untuk saya ketika mengganti 'PHPUnit_Framework_TestCase' menjadi '\ PHPUnit \ Framework \ TestCase'
Jika Anda memiliki Centos atau distribusi Linux lain Anda harus menginstal paket phpunit, saya melakukannya dengan yum instal phpunit dan itu berhasil. Mungkin Anda harus menambahkan repositori, tetapi saya pikir itu harus bekerja dengan lancar dengan yang standar (Saya punya CentOS 7)
Mungkin Anda menjalankan tes inti WordPress, dan baru-baru ini memutakhirkan PhpUnit Anda ke versi 6. Jika itu masalahnya, maka perubahan baru-baru ini untuk namespacing di PhpUnit akan merusak kode Anda.
Untungnya, ada tambalan ke tes inti di https://core.trac.wordpress.org/changeset/40547 yang akan mengatasi masalah tersebut. Ini juga termasuk perubahan pada travis.yml, yang mungkin tidak Anda miliki dalam pengaturan Anda; jika itu masalahnya maka Anda harus mengedit file .diff untuk mengabaikan tambalan Travis.
Edit file tambalan untuk menghapus bagian Travis dari tambalan jika Anda tidak membutuhkannya. Hapus dari atas file hingga tepat di atas baris ini:
Index: /branches/4.7/tests/phpunit/includes/bootstrap.php
Simpan diff di direktori di atas direktori / include / Anda - dalam kasus saya ini adalah direktori Wordpress itu sendiri
Gunakan alat tambalan Unix untuk menambal file. Anda juga harus menghapus beberapa garis miring pertama untuk berpindah dari absolut ke struktur direktori relatif. Seperti yang Anda lihat dari poin 3 di atas, ada lima garis miring sebelum direktori include, yang mana flag -p5 akan dihapuskan untuk Anda.
$ cd [WORDPRESS DIRECTORY]
$ patch -p5 < changeset_40547.diff
Setelah saya melakukan ini, tes saya berjalan dengan benar lagi.
PEMBERITAHUAN: Command php bin/console generate:doctrine:crud
juga membuat TestController
di src/Tests
sehingga dapat melempar kesalahan saat Anda mencoba untuk memulai server jika Anda tidak memiliki UnitTests
. Hapus file perbaiki!
Saya menggunakan php 5.6 di jendela 10 dengan versi zend 1.12 untuk saya tambahkan
require_once 'PHPUnit / Autoload.php';
sebelum
kelas abstrak Zend_Test_PHPUnit_ControllerTestCase meluas PHPUnit_Framework_TestCase
bekerja. Kita perlu menambahkan pernyataan di atas dalam file ControllerTestCase.php