เหตุใดฉันจึงได้รับข้อผิดพลาด 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');
UPDATE
ใน 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 ในขณะนี้เป็นเนมสเปซ (ตรวจสอบการเปลี่ยนแปลง )
คุณจะต้อง refactor สิ่งที่ต้องการ\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"
ในไฟล์ bootstrap 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 test:
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 ไม่รู้ว่าทำไม ... แต่ในกรณีที่มีคนกำลังดิ้นรนกับสิ่งนี้ฉันหวังว่านี่จะช่วยได้
อัสสัมชั:
Phpunit (3.7)พร้อมใช้งานในสภาพแวดล้อมคอนโซล
หนังบู๊:
ป้อนคำสั่งต่อไปนี้ในคอนโซล:
SHELL> phpunit "{{PATH TO THE FILE}}"
ความคิดเห็นที่:
คุณไม่จำเป็นต้องรวมอะไรไว้ใน PHPUnit เวอร์ชันใหม่เว้นแต่คุณจะไม่ต้องการเรียกใช้ในคอนโซล ตัวอย่างเช่นการทดสอบในเบราว์เซอร์
ฉันใช้ ZF2 และทำงานให้ฉันเมื่อแทนที่ 'PHPUnit_Framework_TestCase' เป็น '\ PHPUnit \ Framework \ TestCase'
หากคุณมี Centos หรือการแจกจ่าย Linux อื่น ๆ คุณต้องติดตั้งแพ็คเกจ phpunit ฉันทำสิ่งนั้นด้วย yum ติดตั้ง phpunit และใช้งานได้ บางทีคุณอาจต้องเพิ่มที่เก็บ แต่ฉันคิดว่ามันต้องทำงานได้อย่างราบรื่นกับค่าเริ่มต้น (ฉันมี CentOS 7)
อาจเป็นไปได้ว่าคุณกำลังใช้การทดสอบหลักของ WordPress และเพิ่งอัปเกรด PhpUnit ของคุณเป็นเวอร์ชัน 6 หากเป็นเช่นนั้นการเปลี่ยนแปลงล่าสุดในการกำหนดเนมสเปซใน PhpUnit จะทำให้โค้ดของคุณเสียหาย
โชคดีที่มีแพตช์สำหรับการทดสอบหลักที่https://core.trac.wordpress.org/changeset/40547ซึ่งจะช่วยแก้ปัญหาได้ นอกจากนี้ยังรวมถึงการเปลี่ยนแปลง travis.yml ซึ่งคุณอาจไม่มีในการตั้งค่าของคุณ หากเป็นเช่นนั้นคุณจะต้องแก้ไขไฟล์. diff เพื่อละเว้นแพตช์ Travis
แก้ไขไฟล์แพทช์เพื่อลบส่วน Travis ของแพตช์หากคุณไม่ต้องการสิ่งนั้น ลบจากด้านบนสุดของไฟล์ไปเหนือบรรทัดนี้:
Index: /branches/4.7/tests/phpunit/includes/bootstrap.php
บันทึกความแตกต่างในไดเร็กทอรีเหนือไดเร็กทอรี / include / ของคุณ - ในกรณีของฉันนี่คือไดเร็กทอรี Wordpress เอง
ใช้เครื่องมือ Unix patch เพื่อแก้ไขไฟล์ คุณจะต้องตัดเครื่องหมายทับสองสามตัวแรกเพื่อย้ายจากโครงสร้างไดเร็กทอรีแบบสัมบูรณ์ไปยังโครงสร้างไดเร็กทอรีสัมพัทธ์ ดังที่คุณเห็นจากจุดที่ 3 ด้านบนมีเครื่องหมายทับห้าตัวก่อนไดเรกทอรีรวมซึ่งแฟล็ก -p5 จะกำจัดให้คุณ
$ cd [WORDPRESS DIRECTORY]
$ patch -p5 < changeset_40547.diff
หลังจากที่ฉันทำสิ่งนี้การทดสอบของฉันก็ดำเนินไปอย่างถูกต้องอีกครั้ง
ข้อสังเกต:คำสั่งphp bin/console generate:doctrine:crud
ยังสร้างTestController
ในเพื่อที่จะสามารถโยนความผิดพลาดเมื่อคุณพยายามที่จะเริ่มต้นเซิร์ฟเวอร์ถ้าคุณไม่ได้มีsrc/Tests
UnitTests
เอาไฟล์ออกแก้ไข!
สำหรับฉันมันเป็นเพราะฉันวิ่ง
$ phpunit .
แทน
$ phpunit
เมื่อฉันมีphpunit.xml
ไฟล์ที่กำหนดค่าไว้แล้วในไดเร็กทอรีการทำงาน
ฉันใช้ php 5.6 บน window 10 กับ zend เวอร์ชัน 1.12 สำหรับฉันเพิ่ม
require_once 'PHPUnit / Autoload.php';
ก่อน
คลาสนามธรรม Zend_Test_PHPUnit_ControllerTestCase ขยาย PHPUnit_Framework_TestCase
ทำงาน เราจำเป็นต้องเพิ่มข้อความข้างต้นนี้ในไฟล์ ControllerTestCase.php