क्यों, घातक त्रुटि: वर्ग 'PHPUnit_Framework_TestCase' में नहीं मिला ...?


127

मुझे यह PHP त्रुटि क्यों हो रही है?

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

9
आप कोई भी जानकारी नहीं दे रहे हैं।
पेका

अपना परीक्षण फ़पुनिट कमांड-लाइन के माध्यम से चलाएं। यह आवश्यक कक्षाओं को लोड करता है।
हाफस्टॉप

आप निम्न उत्तर stackoverflow.com/questions/42811164/… से अपने कोड को PHPUnit 6 के साथ-साथ पुराने संस्करणों के साथ संगत रखने के लिए भी उपयोग कर सकते हैं ।
रॉबसन

जवाबों:


73

PHPUnit प्रलेखन कहते हैं शामिल करने के लिए / आवश्यकता PHPUnit / Framework.php कहा करते थे, के रूप में इस प्रकार है:

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

अपडेट करें

PHPUnit 3.5 के रूप में, एक अंतर्निहित ऑटोलोडर वर्ग है जो आपके लिए इसे संभाल लेगा:

require_once 'PHPUnit/Autoload.php';

यह इंगित करने के लिए फीनिक्स का धन्यवाद!


14
PHPUnit 3.5 अपने स्वयं के require_once 'PHPUnit/Autoload.php'

1
मुझे इस बात पर ध्यान देना चाहिए कि __ce ('PHPUnit / Autoload.php') सबसे अच्छा अभ्यास है।
पॉल मैडमेंट

1
मेरे पास दोनों नहीं हैं PHPUnit/Autoload.phpऔर PHPUnit/Framework/TestCase.php, मेरा फ़ोल्डर एक तरह का हैPHPUnit/Framework/MockObject
सूफेंडी

4
और अब मेरे पास है PHP Fatal error: require_once(): Failed opening required 'PHPUnit/Autoload.php'
डेनिस

1
PHP 6+ के लिए @ shadi का जवाब देखें stackoverflow.com/a/42561590/2883328
डेनिस

237

2017-02-03 (जैसे संगीतकार के साथ) पर जारी किए गए संस्करण 6 या उससे अधिक के अपडेट के बाद यहाँ आने वालों के लिए , आपको यह त्रुटि हो सकती है क्योंकि फ़पुनिट कोड अब नामांकित (चेक चैंज ) है।

आप जैसी चीजों refactor करने के लिए की आवश्यकता होगी \PHPUnit_Framework_TestCaseकरने के लिए\PHPUnit\Framework\TestCase


4
धन्यवाद, मुझे ट्रैविस सीआई द्वारा उनके PHP 7 बिल्ड पर सबसे हाल के PHPUnit संस्करण का उपयोग करने के कारण यह समस्या थी। मेरा फिक्स मैन्युअल रूप से एक पुराने फ़ार को डाउनलोड करना और इसके बजाय उसका उपयोग करना था।
असंतुष्टगीतगो

2
github.com/sebastianbergmann/phpunit/wiki/… यह जारी नोटों के शीर्ष पर है, फिर भी मैंने इसे याद किया
Qchmqs

धन्यवाद, कृपया, श्रीमान। मैं वास्तव में संस्करण 6 में अपग्रेड करने के बाद यहां आ रहा हूं
h4ckNinja

मुझे वास्तव में गुस्सा आ रहा था कि मेरे परीक्षणों ने अचानक काम करना बंद कर दिया। मैंने एक संगीतकार अपडेट किया और इसने मेरी PHPunit को 6.1 पर अपडेट किया। धन्यवाद।
जेड लिंच

38

6.4 के रूप में phpunit के उच्च संस्करण के लिए, आपको नामस्थान PHPUnit \ Framework \ TestCase का उपयोग करना चाहिए

PHPCnit_Framework_TestCase के बजाय TestCase का उपयोग करें

// use the following namespace
use PHPUnit\Framework\TestCase;

// extend using TestCase instead PHPUnit_Framework_TestCase
class SampleTest extends TestCase {

}

उत्कृष्ट यह मेरे लिए काम किया क्योंकि मैं एक पुराने ट्यूटोरियल का पालन कर रहा था

आपने सिर्फ shadi के उत्तर की प्रतिलिपि बनाई
एडम

@ अदम जो शदी है?
जिजेश चेरई

मैं ऐसी बात नहीं जानता। मुझे एक ही त्रुटि मिली, फिर मैंने पैकेज को क्रैक करके उत्तर का पता लगाया
जीजेश चेरई

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

मैं PHP5 पर PHPUnit परीक्षण चला रहा था, और फिर, मुझे PHP7 का भी समर्थन करने की आवश्यकता थी। यह जो मैंने किया है:

कंपोजर.जॉन में:

"phpunit/phpunit": "~4.8|~5.7"

मेरे 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 परीक्षण चलाएं:

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
यह अब काम नहीं करता है क्योंकि PHPUnit अक्षांश अब पुराने वर्ग के नाम जैसे का समर्थन नहीं करता है PHPUnit_Framework_TestCase। आपको वास्तव में उपयोग करना है... extends PHPUnit\Framework\TestCase
मिकको रैंटलैनेन

बस इतना कह रहा हूं कि मुझे पहले mv phpunit /usr/local/bin/phpunitऔर फिर sudo chmod +x /usr/local/bin/phpunit। फ़ाइल को निष्पादन योग्य के रूप में सेट करने से पहले इसे वैग्रंट उबंटू पर काम नहीं करना चाहिए। पता नहीं क्यों ... लेकिन अगर कोई इससे जूझ रहा है, तो मुझे उम्मीद है कि इससे मदद मिलेगी।
जॉर्ज मायलनस

4

कल्पना:

कंसोल वातावरण में Phpunit (3.7) उपलब्ध है।

क्रिया:

कंसोल में निम्न कमांड दर्ज करें:

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

टिप्पणियाँ:

जब तक आप कंसोल में नहीं चलना चाहते हैं तब तक आपको PHPUnit के नए संस्करणों में कुछ भी शामिल करने की आवश्यकता नहीं है। उदाहरण के लिए, ब्राउज़र में परीक्षण चलाना।



0

यदि आपके पास Centos या अन्य लिनक्स वितरण हैं, तो आपको phpunit पैकेज स्थापित करना होगा, मैंने ऐसा किया कि yum के साथ phpunit इंस्टॉल किया गया और यह काम किया। शायद आपको एक रिपॉजिटरी जोड़ना पड़ सकता है, लेकिन मुझे लगता है कि इसे डिफ़ॉल्ट लोगों के साथ काम करना होगा (मेरे पास CentOS 7 है)


0

यह अच्छी तरह से हो सकता है कि आप वर्डप्रेस कोर परीक्षण चला रहे हैं, और आपने हाल ही में अपने PhpUnit को संस्करण 6 में अपग्रेड किया है। यदि ऐसा है, तो हाल ही में PhpUnit में नामस्थान में परिवर्तन करने से आपका कोड टूट जाएगा।

सौभाग्य से, https://core.trac.wordpress.org/changeset/40547 पर मुख्य परीक्षणों के लिए एक पैच है जो समस्या के आसपास काम करेगा। इसमें travis.yml में परिवर्तन भी शामिल हैं, जो आपके सेटअप में नहीं हो सकता है; अगर ऐसा है तो आपको ट्रैविस पैच को नजरअंदाज करने के लिए .diff फाइल को एडिट करना होगा।

  1. Https://core.trac.wordpress.org/changeset/40547 के नीचे से "यूनिफाइड डिफ" पैच डाउनलोड करें
  2. पैच की ट्रैविस भाग को हटाने के लिए पैच फ़ाइल को संपादित करें यदि आपको इसकी आवश्यकता नहीं है। इस पंक्ति के ऊपर फ़ाइल के शीर्ष से हटाएं:

    Index: /branches/4.7/tests/phpunit/includes/bootstrap.php
  3. अपने / शामिल / निर्देशिका के ऊपर निर्देशिका में अंतर को सहेजें - मेरे मामले में यह वर्डप्रेस निर्देशिका ही थी

  4. फ़ाइलों को पैच करने के लिए यूनिक्स पैच टूल का उपयोग करें। तुम भी एक रिश्तेदार निर्देशिका संरचना के लिए एक निरपेक्ष से स्थानांतरित करने के लिए पहले कुछ स्लेश पट्टी करने की आवश्यकता होगी। जैसा कि आप ऊपर बिंदु 3 से देख सकते हैं, इसमें शामिल डायरेक्टरी से पहले पांच स्लैश हैं, जो कि a -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

मैं विंडो 10 पर php 5.6 का उपयोग कर रहा हूँ, मुझे जोड़ने के लिए zend 1.12 संस्करण के साथ

requirement_once 'PHPUnit / Autoload.php';

इससे पहले

अमूर्त वर्ग

काम किया। हमें कंट्रोलरटेस्ट.फेस फाइल में इस उपरोक्त स्टेटमेंट को जोड़ना होगा

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.