ทำไมข้อผิดพลาดร้ายแรง: ไม่พบคลาส 'PHPUnit_Framework_TestCase' ใน…?


127

เหตุใดฉันจึงได้รับข้อผิดพลาด PHP นี้

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

9
คุณไม่ได้ให้ข้อมูลใด ๆ เลย
Pekka

เรียกใช้การทดสอบของคุณผ่านบรรทัดคำสั่ง phpunit โหลดคลาสที่จำเป็น
Halfstop

คุณยังสามารถใช้คำตอบจากคำตอบต่อไปนี้stackoverflow.com/questions/42811164/…เพื่อให้โค้ดของคุณเข้ากันได้กับ PHPUnit 6 และเวอร์ชันก่อนหน้า
Robson

คำตอบ:


73

เอกสาร PHPUnit กล่าวใช้ในการพูดที่จะรวม / ต้อง PHPUnit / Framework.php ดังต่อไปนี้:

require_once ('PHPUnit/Framework/TestCase.php');

UPDATE

ใน PHPUnit 3.5 มีคลาสตัวโหลดอัตโนมัติในตัวที่จะจัดการสิ่งนี้ให้คุณ:

require_once 'PHPUnit/Autoload.php';

ขอบคุณ Phoenix ที่ชี้ให้เห็น!


14
PHPUnit 3.5 มาพร้อมกับตัวโหลดอัตโนมัติที่อาจช่วยให้สิ่งต่างๆง่ายขึ้น: require_once 'PHPUnit/Autoload.php'

1
ฉันเห็นพ้องกันว่า require_once ('PHPUnit / Autoload.php') เป็นแนวทางปฏิบัติที่ดีที่สุด
Paul Maidment

1
ฉันไม่มีทั้งสองอย่างPHPUnit/Autoload.phpและPHPUnit/Framework/TestCase.phpโฟลเดอร์ของฉันก็เป็นแบบนี้PHPUnit/Framework/MockObject
Sufendy

4
และตอนนี้ฉันมี PHP Fatal error: require_once(): Failed opening required 'PHPUnit/Autoload.php'
เดนนิส

1
ดูคำตอบของ @ Shadi สำหรับ PHP 6+ stackoverflow.com/a/42561590/2883328
Dennis

237

สำหรับผู้ที่มาถึงที่นี่หลังจากอัปเดต phpunit เป็นเวอร์ชัน 6 หรือสูงกว่าที่เผยแพร่ในวันที่ 2017-02-03 (เช่นกับผู้แต่ง) คุณอาจได้รับข้อผิดพลาดนี้เนื่องจากโค้ด phpunit ในขณะนี้เป็นเนมสเปซ (ตรวจสอบการเปลี่ยนแปลง )

คุณจะต้อง refactor สิ่งที่ต้องการ\PHPUnit_Framework_TestCaseที่จะ\PHPUnit\Framework\TestCase


4
ขอบคุณฉันมีปัญหานี้เนื่องจาก Travis CI ใช้ PHPUnit เวอร์ชันล่าสุดในงานสร้าง PHP 7 การแก้ไขของฉันคือดาวน์โหลด phar เก่าด้วยตนเองและใช้สิ่งนั้นแทน
แพะไม่พอใจ

2
github.com/sebastianbergmann/phpunit/wiki/…อยู่ด้านบนของบันทึกประจำรุ่น แต่ฉันพลาด
Qchmqs

ขอบคุณมากครับท่านที่ดี ฉันมาถึงที่นี่หลังจากอัปเกรดเป็นเวอร์ชัน 6 แล้ว
h4ckNinja

ฉันรู้สึกรำคาญมากที่การทดสอบของฉันหยุดทำงานกะทันหัน ฉันอัปเดตนักแต่งเพลงและอัปเดต PHPunit เป็น 6.1 ขอบคุณ.
Jed Lynch

38

สำหรับ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 {

}

สิ่งนี้ใช้ได้ผลกับฉันมากเพราะฉันทำตามบทช่วยสอนเก่า

คุณเพิ่งคัดลอกคำตอบของชาดี
อดัม

@ อดัมคือชาดิ?
Jijesh Cherrai

ฉันไม่รู้เรื่องแบบนี้ ฉันได้รับข้อผิดพลาดเดียวกันจากนั้นฉันจะค้นหาคำตอบโดยการแตกแพ็คเกจ
Jijesh Cherrai

13

คุณอาจได้รับข้อผิดพลาดนี้เนื่องจากคุณตั้งชื่อไฟล์ ในกรณีนี้คุณจะต้องระบุว่า PHPUnit_Framework_TestCase อยู่ในเนมสเปซส่วนกลางโดยนำหน้าด้วยแบ็กสแลช:

namespace AcmeInc\MyApplication\Tests
class StackTest extends \PHPUnit_Framework_TestCase {}

ฉันส่งประชาสัมพันธ์น้ำมันดิบที่จะเริ่มต้นการสนทนาสำหรับการแก้ไขเอกสาร


1
ใช่ถ้าคุณทำสิ่งนี้: class YourNiceTest extends PHPUnit_Framework_TestCaseเพียงแค่เพิ่ม \ ข้างหน้าคลาสขยายเช่นในclass YourNiceTest extends \PHPUnit_Framework_TestCase- สิ่งนี้ใช้ได้ผลสำหรับฉันโดยใช้Symfony 2.8และรวมถึงphpunitไฟล์นักแต่งเพลงที่ดาวน์โหลดมาเป็นการพึ่งพาในเครื่องด้วย"phpunit/phpunit": "^4.8"
Xavi Montero

12

ฉันกำลังเรียกใช้การทดสอบ 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 ด้วย


1
วิธีนี้สำคัญหากคุณไม่ต้องการสัมผัสรหัส Civi \ Test แต่ต้องเข้ากันได้กับการทดสอบหน่วย php ที่ใช้เนมสเปซล่าสุด
Shahadat Hossain Khan

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

3
สิ่งนี้ใช้ไม่ได้อีกต่อไปเนื่องจาก latests PHPUnit ไม่รองรับชื่อคลาสเก่าเช่นPHPUnit_Framework_TestCase. คุณต้องใช้จริงๆ... extends PHPUnit\Framework\TestCase
Mikko Rantalainen

เพียงแค่บอกว่าฉันได้ไปครั้งแรกแล้วmv phpunit /usr/local/bin/phpunit sudo chmod +x /usr/local/bin/phpunitการตั้งค่าไฟล์เป็นปฏิบัติการก่อนที่จะย้ายมันไม่เคยทำงานบน Vagrant Ubuntu ไม่รู้ว่าทำไม ... แต่ในกรณีที่มีคนกำลังดิ้นรนกับสิ่งนี้ฉันหวังว่านี่จะช่วยได้
George Mylonas

4

อัสสัมชั:

Phpunit (3.7)พร้อมใช้งานในสภาพแวดล้อมคอนโซล

หนังบู๊:

ป้อนคำสั่งต่อไปนี้ในคอนโซล:

SHELL> phpunit "{{PATH TO THE FILE}}"

ความคิดเห็นที่:

คุณไม่จำเป็นต้องรวมอะไรไว้ใน PHPUnit เวอร์ชันใหม่เว้นแต่คุณจะไม่ต้องการเรียกใช้ในคอนโซล ตัวอย่างเช่นการทดสอบในเบราว์เซอร์



0

หากคุณมี Centos หรือการแจกจ่าย Linux อื่น ๆ คุณต้องติดตั้งแพ็คเกจ phpunit ฉันทำสิ่งนั้นด้วย yum ติดตั้ง phpunit และใช้งานได้ บางทีคุณอาจต้องเพิ่มที่เก็บ แต่ฉันคิดว่ามันต้องทำงานได้อย่างราบรื่นกับค่าเริ่มต้น (ฉันมี CentOS 7)


0

อาจเป็นไปได้ว่าคุณกำลังใช้การทดสอบหลักของ WordPress และเพิ่งอัปเกรด PhpUnit ของคุณเป็นเวอร์ชัน 6 หากเป็นเช่นนั้นการเปลี่ยนแปลงล่าสุดในการกำหนดเนมสเปซใน PhpUnit จะทำให้โค้ดของคุณเสียหาย

โชคดีที่มีแพตช์สำหรับการทดสอบหลักที่https://core.trac.wordpress.org/changeset/40547ซึ่งจะช่วยแก้ปัญหาได้ นอกจากนี้ยังรวมถึงการเปลี่ยนแปลง travis.yml ซึ่งคุณอาจไม่มีในการตั้งค่าของคุณ หากเป็นเช่นนั้นคุณจะต้องแก้ไขไฟล์. diff เพื่อละเว้นแพตช์ Travis

  1. ดาวน์โหลดโปรแกรมแก้ไข "Unified Diff" จากด้านล่างของ https://core.trac.wordpress.org/changeset/40547
  2. แก้ไขไฟล์แพทช์เพื่อลบส่วน Travis ของแพตช์หากคุณไม่ต้องการสิ่งนั้น ลบจากด้านบนสุดของไฟล์ไปเหนือบรรทัดนี้:

    Index: /branches/4.7/tests/phpunit/includes/bootstrap.php
  3. บันทึกความแตกต่างในไดเร็กทอรีเหนือไดเร็กทอรี / include / ของคุณ - ในกรณีของฉันนี่คือไดเร็กทอรี Wordpress เอง

  4. ใช้เครื่องมือ Unix patch เพื่อแก้ไขไฟล์ คุณจะต้องตัดเครื่องหมายทับสองสามตัวแรกเพื่อย้ายจากโครงสร้างไดเร็กทอรีแบบสัมบูรณ์ไปยังโครงสร้างไดเร็กทอรีสัมพัทธ์ ดังที่คุณเห็นจากจุดที่ 3 ด้านบนมีเครื่องหมายทับห้าตัวก่อนไดเรกทอรีรวมซึ่งแฟล็ก -p5 จะกำจัดให้คุณ

    $ cd [WORDPRESS DIRECTORY]
    $ patch -p5 < changeset_40547.diff 

หลังจากที่ฉันทำสิ่งนี้การทดสอบของฉันก็ดำเนินไปอย่างถูกต้องอีกครั้ง


0

ข้อสังเกต:คำสั่งphp bin/console generate:doctrine:crudยังสร้างTestControllerในเพื่อที่จะสามารถโยนความผิดพลาดเมื่อคุณพยายามที่จะเริ่มต้นเซิร์ฟเวอร์ถ้าคุณไม่ได้มีsrc/Tests UnitTestsเอาไฟล์ออกแก้ไข!


0

สำหรับฉันมันเป็นเพราะฉันวิ่ง

$ phpunit .

แทน

$ phpunit

เมื่อฉันมีphpunit.xmlไฟล์ที่กำหนดค่าไว้แล้วในไดเร็กทอรีการทำงาน


0

ฉันใช้ php 5.6 บน window 10 กับ zend เวอร์ชัน 1.12 สำหรับฉันเพิ่ม

require_once 'PHPUnit / Autoload.php';

ก่อน

คลาสนามธรรม Zend_Test_PHPUnit_ControllerTestCase ขยาย PHPUnit_Framework_TestCase

ทำงาน เราจำเป็นต้องเพิ่มข้อความข้างต้นนี้ในไฟล์ ControllerTestCase.php

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.