मुझे यह 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');
अपडेट करें
PHPUnit 3.5 के रूप में, एक अंतर्निहित ऑटोलोडर वर्ग है जो आपके लिए इसे संभाल लेगा:
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'
2017-02-03 (जैसे संगीतकार के साथ) पर जारी किए गए संस्करण 6 या उससे अधिक के अपडेट के बाद यहाँ आने वालों के लिए , आपको यह त्रुटि हो सकती है क्योंकि फ़पुनिट कोड अब नामांकित (चेक चैंज ) है।
आप जैसी चीजों refactor करने के लिए की आवश्यकता होगी \PHPUnit_Framework_TestCase
करने के लिए\PHPUnit\Framework\TestCase
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 {
}
आपको यह त्रुटि मिल सकती है क्योंकि आपने फ़ाइल को नाम दिया है। यदि ऐसा है तो आपको यह निर्दिष्ट करने की आवश्यकता होगी कि 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"
मैं 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 पर भी काम करना होगा।
आप कमांड चलाने के लिए बस 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
PHPUnit_Framework_TestCase
। आपको वास्तव में उपयोग करना है... extends PHPUnit\Framework\TestCase
mv phpunit /usr/local/bin/phpunit
और फिर sudo chmod +x /usr/local/bin/phpunit
। फ़ाइल को निष्पादन योग्य के रूप में सेट करने से पहले इसे वैग्रंट उबंटू पर काम नहीं करना चाहिए। पता नहीं क्यों ... लेकिन अगर कोई इससे जूझ रहा है, तो मुझे उम्मीद है कि इससे मदद मिलेगी।
कल्पना:
कंसोल वातावरण में Phpunit (3.7) उपलब्ध है।
क्रिया:
कंसोल में निम्न कमांड दर्ज करें:
SHELL> phpunit "{{PATH TO THE FILE}}"
टिप्पणियाँ:
जब तक आप कंसोल में नहीं चलना चाहते हैं तब तक आपको PHPUnit के नए संस्करणों में कुछ भी शामिल करने की आवश्यकता नहीं है। उदाहरण के लिए, ब्राउज़र में परीक्षण चलाना।
मैं ZF2 का उपयोग करता हूं और मेरे लिए तब काम करता हूं जब 'PHPUnit_Framework_TestCase' को 'PHPUnit \ Framework \ TestCase' में बदल दिया जाता है
यदि आपके पास Centos या अन्य लिनक्स वितरण हैं, तो आपको phpunit पैकेज स्थापित करना होगा, मैंने ऐसा किया कि yum के साथ phpunit इंस्टॉल किया गया और यह काम किया। शायद आपको एक रिपॉजिटरी जोड़ना पड़ सकता है, लेकिन मुझे लगता है कि इसे डिफ़ॉल्ट लोगों के साथ काम करना होगा (मेरे पास CentOS 7 है)
यह अच्छी तरह से हो सकता है कि आप वर्डप्रेस कोर परीक्षण चला रहे हैं, और आपने हाल ही में अपने PhpUnit को संस्करण 6 में अपग्रेड किया है। यदि ऐसा है, तो हाल ही में PhpUnit में नामस्थान में परिवर्तन करने से आपका कोड टूट जाएगा।
सौभाग्य से, https://core.trac.wordpress.org/changeset/40547 पर मुख्य परीक्षणों के लिए एक पैच है जो समस्या के आसपास काम करेगा। इसमें travis.yml में परिवर्तन भी शामिल हैं, जो आपके सेटअप में नहीं हो सकता है; अगर ऐसा है तो आपको ट्रैविस पैच को नजरअंदाज करने के लिए .diff फाइल को एडिट करना होगा।
पैच की ट्रैविस भाग को हटाने के लिए पैच फ़ाइल को संपादित करें यदि आपको इसकी आवश्यकता नहीं है। इस पंक्ति के ऊपर फ़ाइल के शीर्ष से हटाएं:
Index: /branches/4.7/tests/phpunit/includes/bootstrap.php
अपने / शामिल / निर्देशिका के ऊपर निर्देशिका में अंतर को सहेजें - मेरे मामले में यह वर्डप्रेस निर्देशिका ही थी
फ़ाइलों को पैच करने के लिए यूनिक्स पैच टूल का उपयोग करें। तुम भी एक रिश्तेदार निर्देशिका संरचना के लिए एक निरपेक्ष से स्थानांतरित करने के लिए पहले कुछ स्लेश पट्टी करने की आवश्यकता होगी। जैसा कि आप ऊपर बिंदु 3 से देख सकते हैं, इसमें शामिल डायरेक्टरी से पहले पांच स्लैश हैं, जो कि a -p5 फ्लैग आपके लिए छुटकारा दिलाएगा।
$ cd [WORDPRESS DIRECTORY]
$ patch -p5 < changeset_40547.diff
ऐसा करने के बाद मेरा परीक्षण फिर से सही ढंग से चला।
सूचना: यदि आप सर्वर को शुरू करने की कोशिश नहीं करते php bin/console generate:doctrine:crud
हैं TestController
, src/Tests
तो कमांड भी बना सकता है , ताकि यह त्रुटि हो UnitTests
। फ़ाइल को ठीक करें!