PHPUnit - कॉन्फ़िगरेशन फ़ाइल का उपयोग करते समय 'कोई परीक्षण निष्पादित नहीं'


89

समस्या

मेरे कोड की गुणवत्ता में सुधार करने के लिए, मैंने अपने औसत दर्जे के सर्वश्रेष्ठ परीक्षण समाधानों के बजाय यूनिट परीक्षण का उपयोग करके अपने कोड को कैसे परीक्षण करना सीखने की कोशिश करने का निर्णय लिया है।

मैंने एक निजी पुस्तकालय के लिए संगीतकार का उपयोग करके PHPUnit को स्थापित करने का निर्णय लिया, जो मुझे सामान्य डेटाबेस फ़ंक्शन प्राप्त करने की अनुमति देता है। पहले तो मेरे पास PHPUnit के लिए एक विन्यास फाइल नहीं थी और जब मैंने जैसे कमांड चलाया:

$ phpunit tests/GeneralStringFunctions/GeneralStringFunctionsTest

कृपया ध्यान दें कि यह एक टर्मिनल कमांड है, इसलिए मैंने .phpएक्सटेंशन को शामिल नहीं किया । ऊपर वर्णित GeneralStringFunctionsTest वास्तव में एक GeneralStringFunctionsTest.phpफाइल है।

आउटपुट वह है जिसकी मुझे उम्मीद थी:

समय: 31 एमएस, मेमोरी: 2.75 एमबी

ठीक है (1 परीक्षण, 1 जोर)

फिर मैंने हर बार फ़ाइल में मैन्युअल रूप से टाइप करने के बजाय परीक्षण सूट को स्वचालित रूप से लोड करने के लिए एक कॉन्फ़िगरेशन फ़ाइल का उपयोग करने की कोशिश की। मैंने phpunit.xmlअपनी रूट डायरेक्टरी में एक फाइल बनाई , और निम्नलिखित को फाइल में दर्ज किया: http://pastebin.com/0j0L4BBB :

<?xml version = "1.0" encoding="UTF-8" ?>
<phpunit>
    <testsuites>
        <testsuite name="Tests">
            <directory>tests</directory>
        </testsuite>
    </testsuites>
</phpunit>

अब, जब मैं कमांड चलाता हूं:

phpunit

मुझे निम्न आउटपुट मिले:

सेबस्टियन बर्गमैन और योगदानकर्ताओं द्वारा PHPUnit 4.5.0।

/Users/muyiwa/Projects/DatabaseHelper/phpunit.xml से कॉन्फ़िगरेशन पढ़ा गया

समय: 16 एमएस, मेमोरी: 1.50 एमबी

कोई परीक्षण निष्पादित नहीं!

मामले में यह उपयोगी है, मेरी निर्देशिका संरचना इस प्रकार है:
src - शीर्ष स्तर निर्देशिका (मेरे सभी स्रोत कोड के साथ)
परीक्षण - शीर्ष स्तर निर्देशिका (मेरे सभी परीक्षणों के साथ, मेरे src फ़ोल्डर के समान संरचित )
विक्रेता - संगीतकार तृतीय पक्ष फ़ाइलें

मेरे पास कंपोजर जोंस और लॉक फाइल भी है, साथ ही फाइल के रूप में टॉप लेवल में phpunit xml फाइल भी है।

चीजें जो मैंने कोशिश की हैं

  • में निर्देशिका बदलने phpunit.xmlके लिएtests/GeneralStringFunctions
  • में निर्देशिका बदलने phpunit.xmlके लिए./tests
  • चलती phpunit.xmlकरने के लिए फ़ाइल testsनिर्देशिका और फिर बदलते निर्देशिका होने की ./बजाय tests
  • phpunit.xml"टेस्ट" को स्पष्ट प्रत्यय के रूप में निर्दिष्ट करने के लिए निर्देशिका टैग में एक प्रत्यय विशेषता जोड़ना।

है tests/GeneralStringFunctions/GeneralStringFunctionsTestएक फ़ोल्डर या फ़ाइल नाम?
hek2mgl

@ hek2mgl यह एक फ़ाइल नाम है, इसे वास्तव में कहा जाता है GeneralStringFunctionsTest.php। कमांड लाइन इंटरफ़ेस में, मैंने .phpएक्सटेंशन दर्ज नहीं किया क्योंकि यह इसके बिना काम करता था।
मुइवा ओलू

1
ठीक है, तो आपका कॉन्फ़िगरेशन काम करना चाहिए। Btw, यदि आप एक प्रत्यय निर्दिष्ट यह होना चाहिए Test.phpके बजाय Testअपने मामले में है, लेकिन फिर भी, आप कि छोड़ देते हैं करने के लिए स्वतंत्र हैं, क्योंकि Test.phpडिफ़ॉल्ट मान है।
hek2mgl

@ hek2mgl सिर के लिए धन्यवाद! क्या आपको पता है कि कॉन्फ़िगरेशन फ़ाइल के साथ मेरा परीक्षण क्यों नहीं चल रहा है phpunit.xml?
मुइवा ओलू

आप हमें कॉन्फ़िगरेशन फ़ाइल क्यों नहीं दिखाते हैं?
ThW

जवाबों:


191

इसके लायक क्या है (देर से होना), मैं हाल ही में इसमें भाग गया जब मैं एक साधारण वेबसाइट के लिए एक नया लारवेल 5.1 परियोजना बना रहा था। मैंने इसे डिबग करने की कोशिश की और जब मैंने कोशिश की तो उलझन में था:

php artisan make:test homeTest

(जिसमें एक डिफ़ॉल्ट परीक्षण है कि सिर्फ सच का दावा सही है)

और आउटपुट देखा

No tests executed!

जो समस्या मेरे लिए समाप्त हो रही थी वह मेरे PHP इंस्टॉलेशन से संबंधित थी - "phpunit" को विश्व स्तर पर पंजीकृत किया गया था और इसे अलग-अलग तरीके से कॉन्फ़िगर किया गया था, जबकि Laravel इंस्टॉलेशन के साथ आया हुआ फ़ेपुनिट बस सही तरीके से कॉन्फ़िगर किया गया था और पूरी तरह से चला गया था।

तो फिक्स विक्रेता के कॉन्फ़िगर किए गए फ़ापुनिट (ऐप और परीक्षण / / के रूप में एक ही मूल निर्देशिका से) चला रहा है:

./vendor/bin/phpunit

आशा है कि किसी और की मदद करता है!


4
मुझे लगता है कि यह सबसे सही उत्तर है। चूंकि मैंने परियोजना को हटा दिया है इसलिए मेरे पास दोहरी जांच का कोई रास्ता नहीं है, लेकिन संगीतकार के साथ भविष्य की परियोजनाओं के लिए, मैंने हमेशा vendor/bin/phpunitवैश्विक phpunitबाइनरी के बजाय उपयोग किया है । मैं अब तक वैश्विक phpunitबाइनरी को दूर करने के रूप में चला गया हूं, इसलिए मैं गलती से फिर से वही गलती नहीं करता - और यह तब से पॉप अप नहीं हुआ है। मैं इसे स्वीकृत उत्तर के रूप में चिह्नित करूंगा, क्योंकि यह सबसे अधिक संभावना है।
मुइवा ओलू

3
कॉलिंग ./vendor/bin/phpunitने मेरे लिए एक ताज़ा लार्वा 5.4 पर स्थापित किया
ira

इसी तरह, इसने मुझे Wordpress प्रोजेक्ट पर काम करते समय मदद की। एक ही समस्या: "phpunit" विश्व स्तर पर पंजीकृत और अलग तरीके से कॉन्फ़िगर किया जा सकता है। साझा करने के लिए धन्यवाद!
sqsinger

यह मेरे लिए तय है, लेकिन क्या विश्व स्तर पर फ़ापुनिट को ठीक करने का एक तरीका है? यह अच्छा होगा अगर मैं सिर्फ टाइप कर सकता phpunit
हूं

2
@Noitidart आप एक बना सकते हैं aliasके लिए ./vendor/bin/phpunit
गणेश कश्मीर

98

आपकी XML फ़ाइल ठीक है जैसा कि यह है। हालाँकि, आपको यह सुनिश्चित करना होगा कि आपके tests/फ़ोल्डर में मौजूद PHP फाइलें इस प्रकार हैं:

परीक्षण / Test.php <--- अपरकेस "टी"
परीक्षण / उपयोगकर्ता Test.php
परीक्षण / fooBar Test.php
आदि पर ध्यान दें

फ़ाइल नाम "Test.php" के साथ समाप्त होना चाहिए । यह वही है जो PHPUnit निर्देशिकाओं के लिए देख रहा है।

इसके अलावा, हर परीक्षा पद्धति में एक नाम होना चाहिए जो "परीक्षण" से शुरू होता है:

public function testFooBar()
{
    // Your test code
}

उम्मीद है की वो मदद करदे!


4
या आप --test-suffix=anything.phpओवरराइड करने के लिए उपयोग कर सकते हैं
चेक

मेरे लिए यह पूर्ण पथ के साथ फ़ोल्डर का परीक्षण करने के लिए सापेक्ष पथ को बदलने के लिए उपयोगी था।
तैमूर समचारडेज़

कॉन्फ़िगरेशन फ़ाइल में मैं इसे कैसे ओवरराइड कर सकता हूं?
जोनाथन

19

विंडोज़ पर टर्मिनल पर निम्न कमांड का उपयोग करें

.\vendor\bin\phpunit

अगर यह आदेश है

phpunit

रिटर्न "कोई परीक्षण निष्पादित नहीं!"

जबकि मैक पर

./vendor/bin/phpunit

आशा करता हूँ की ये काम करेगा।


आपके उत्तर के लिए बहुत बहुत धन्यवाद, यह वास्तव में मदद करता है।
गोका ओबासा

सुनिश्चित करें कि phpunitआपके वैश्विक पथ पर कोई नहीं है (आप इसे कुछ चलाने की जाँच कर सकते हैं phpunit --versionऔर देख सकते हैं कि क्या यह आप से अपेक्षा कर रहा है कि मिलान है। Xampp आमतौर पर एक ही php बिन dir पर एक phpunit स्थापित करता है। यह मेरे लिए समस्या थी।
Giovannipds

12

मुझे अपने वर्चुअल मशीन पर PHPUnit के बाद संस्करण 6. में अपडेट होने के बाद भी यही समस्या थी। यहां तक ​​कि -debug और --verbose ने कुछ भी उपयोगी नहीं कहा, बस "कोई परीक्षण निष्पादित नहीं किया गया"। अंत में यह पता चला कि नए संस्करण में कक्षाएं और नाम स्थान बदल दिए गए थे और यह सिर्फ उन फ़ाइलों को निष्पादित नहीं करना चाहता था जिनमें पुरानी कक्षाओं के संदर्भ थे। मेरे लिए यह तय था कि इसे हर परीक्षा के मामले में बदल दिया जाए:

class MyTestCase extends \PHPUnit_Framework_TestCase {...}

साथ में:

use PHPUnit\Framework\TestCase;

class MyTestCase extends TestCase {...}

आह, हाँ, जबकि यह ऐसा नहीं लगता है कि यह मूल प्रश्न का उत्तर था, जिसने 6.x पर अपग्रेड करने के बाद मेरी समस्या को हल कर दिया!
तम

PHPUnit 5.7 से 8.5 के रूप में अच्छी तरह से अपग्रेड करते समय मेरे लिए यह मुद्दा था - टिप के लिए धन्यवाद!
पुष्टिकर्ता

7

मुझे एहसास है कि यह सुपर पुराना है, लेकिन यह सिर्फ मेरे साथ भी हुआ। उम्मीद है कि यह किसी की मदद करेगा।

मेरी समस्या यह थी कि मैं '@ ’प्रतीक को भूल गया / ** @test * / में

गलत:

/** test */
function a_thread_can_be_deleted()
{
    ...
}

सही:

/** @test */
function a_thread_can_be_deleted()
{
    ...
}

1
2 साल बाद, और यह मेरे लिए था। यह वास्तव में टिप्पणी के लिए बिल्कुल प्रारूप होना चाहिए। मैं वहाँ एक लापता जगह थी। इसका पता नहीं चला। क्या थोड़ा कष्टप्रद है, लार्वा 6.1 में मैंने कारीगर को कमांड का उपयोग किया और इसमें वह टिप्पणी शामिल नहीं है
ऐबर्रा

1
यह उत्तर उपयोगी है
सुंदर

जब मैं एक पैकेज विकसित कर रहा था तो मैं इस समस्या में भाग गया। जब मैं 'php आर्टिसन मेक: टेस्ट एवरेस्ट' चलाता हूं और इसे पैकेज टेस्ट डायरेक्टरी में ले जाता हूं, तो बेसिक टेस्ट एक्सप्लेन विधि की टिप्पणी में केवल एक मूल विवरण होता है और @return voidइसमें '@टेस्ट' शामिल नहीं होता है, यही कारण है कि phpunit की पहचान हो सकती है परीक्षण के रूप में।
डैमिन जिआंग

6

मैंने अपने बालों को 10 मिनट के लिए खींचा, इससे पहले कि मैंने उपयोग करने का फैसला किया --debug (जिस तरह से जाने के लिए अच्छा तरीका है) उस सरल तथ्य की खोज करने के लिए कि फ़ाइल नाम ने नामकरण सम्मेलन का सम्मान नहीं किया , मेरे पास अंत में एक अतिरिक्त "s" था। ।

गलत

CreateAdminTests

सही

CreateAdminTest

उम्मीद है कि यह नोट किसी के लिए मदद कर सकता है


1
महान, मैं उसके बाद परीक्षण चलाने में सक्षम था
विंडसैबर



2

यदि आप PHPSTORM का उपयोग सेटिंग्स में जा रहे हैं तो गोटो

  • Test Frameworks

    और + पर क्लिक करें और चुनें

  • PHPUnit Local फिर

  • Use Composer Auto Loader फिर इसे स्क्रिप्ट फ़ील्ड में पथ की तरह पेस्ट करें

  • C:\{YOUR PROJECT NAME}\vendor\autoload.php

  • ओके पर क्लिक करें

  • HAPPY TESTING


2

Phpunit.xml फ़ाइल की जाँच करें, testuites के अंदर देखें।

मेरा संस्करण phpunit (2019) समाप्त होने वाली फाइलों की तलाश में है (प्रत्यय) * Test.php। तो, सुनिश्चित करें कि सभी परीक्षण फ़ाइलों को ठीक से नाम दिया गया है (उदा .: BookTest.php सही है, BookTests.php नहीं है, BookTestCase.php नहीं है)।


2

पार्टी के लिए देर से आया, लेकिन यह जानकारी दूसरों की मदद कर सकती है।

उपरोक्त समाधान मेरे काम नहीं आए। Laravel 7.x के रूप में, डिफ़ॉल्ट रूप से, PHPUnit केवल PHP फ़ाइलों को निष्पादित करता है जो "Test.php" के साथ प्रत्यय हैं। उदाहरण के लिए यदि आप एक परीक्षण बनाते हैं, तो इसका नामकरण CreateUserकाम नहीं करेगा, जबकि नामकरण यह CreateUserTestकाम करेगा।

सीमा को पार करने के लिए, तत्वों से विशेषता को phpunit.xmlसंशोधित और संशोधित करें :suffixdirectory

...
<testsuite name="Unit">

    <!-- modify suffix -->
    <directory suffix=".php">./tests/Unit</directory>

</testsuite>
<testsuite name="Feature">

    <!-- modify suffix -->
    <directory suffix=".php">./tests/Feature</directory>

</testsuite>
...

यह PHPUnit को .phpनिर्देशिकाओं से विस्तार के साथ सभी फ़ाइलों को चलाने का निर्देश देगा । अद्यतन करने के बाद ऐप का कैश साफ़ करने के लिए ध्यान दें phpunit.xml:

php artisan config:cache

PHPUnit XML कॉन्फ़िगरेशन के बारे में अतिरिक्त जानकारी यहाँ देखी जा सकती है: https://phpunit.de/manual/6.5/en/appendixes.configuration.html


1

क्या आपने phpunit.xml फ़ाइल में एक परीक्षण सूट जोड़ा है?

<phpunit>
    <testsuite name="app1" >
        <directory>./</directory>
    </testsuite>
</phpunit>

आप वहां कई निर्देशिका जोड़ सकते हैं।


हाय, क्षमा करें अगर मैंने इसे प्रश्न में स्पष्ट नहीं किया है, लेकिन मैंने एक परीक्षण सूट और इसी नाम को XML फ़ाइल में जोड़ा है। एक प्रति यहां पाई जा सकती है: pastebin.com/0j0L4WBD
मुइवा ओलू

<निर्देशिका> ./ परीक्षण </ निर्देशिका> आज़माएँ
Aine

अपडेट के लिए धन्यवाद, दुर्भाग्य से मुझे अभी भी / .tests के रूप में एक ही समस्या है । Time: 28 ms, Memory: 1.50Mb No tests executed!
मुइवा ओलू

दुर्भाग्य से एक ही समस्या :( Configuration read from /Users/muyiwa/Projects/Web Development/DatabaseHelper/phpunit.xml Time: 66 ms, Memory: 1.50Mb No tests executed!। यह निश्चित रूप से काम करता है जब मैं मैन्युअल रूप से इसे संदर्भ, यह सिर्फ किसी कारण :( विन्यास फाइल से लोड हो रहा है की तरह नहीं है
Muyiwa Olu

अंतिम अनुमान। परीक्षण / निर्देशिका में phpunit.xml फ़ाइल ले जाने का प्रयास करें। फ़ाइल में, निर्देशिका को <निर्देशिका> ./ </ निर्देशिका> में बदलें।
अनीन

0

मेरे लिए, phpunit --debug का उपयोग करके मुझे पता चला है कि कौन सा परीक्षण इसे निष्पादित नहीं कर रहा था, अंदर, मेरे पास था

$this->visit('/')
         ->see('Laravel');

और मुझे लगता है कि निर्देशिका को .htaccess प्रमाणीकरण के साथ संरक्षित किया गया था, यह पृष्ठ पर जाने के लिए नहीं मिल सका

मेरे लिए इसका समाधान यह परीक्षण करना था (या सबसे अधिक संभावना है।।


0

यह बहुत देर हो चुकी है लेकिन मुझे आशा है कि यह किसी की मदद करेगी।

मुझे एक पूर्ण संदर्भ का उपयोग करके चलाने के लिए मेरे परीक्षण मिले। फ़ोल्डर संरचना [परियोजना / परीक्षण / test.php]

मेरी निर्देशिका पंक्ति इस तरह दिखी ।/tests/test.php


0

पक्ष पर थोड़ा सा हो सकता है, लेकिन अगर आप (मेरे जैसे) वैग्रांत में लारवेल का उपयोग कर रहे हैं, तो सुनिश्चित करें कि आप फ़्यूगुनीट को योनि बॉक्स के अंदर चला रहे हैं, न कि "विंडोज़ साइड" पर। :)


0

मेरे पास कोई परीक्षण न किए जाने का मुद्दा था, तब भी जब चीजें ठीक थीं।

इसका कारण था नाम स्थान फ़ाइल की पहली कमांड नहीं थी, यह कुछ डॉक्स-ब्लॉक टिप्पणियों के बाद था।

पुनर्मिलन के कारण परीक्षणों को देखने और सही ढंग से चलाने के लिए फ़ापुनिट का कारण बना।


0

मेरा थोड़ा मजाकिया था।

जब मैंने इस्तेमाल किया तो php artisan make:testमैंने गलती से .php को ProductRewardPointController.phpबनाया जैसे कि बनाया ProductRewardPointController.php.phpऔर phpunit ने बस इसे अनदेखा कर दिया।

मैं बस अतिरिक्त .php और चीजों को वापस सामान्य करने के लिए हटा देता हूं


0

मेरे पास नो टेस्ट्स का एक ही मुद्दा था! , फ़ाइल और वर्ग नाम का समान नाम रखकर हल किया गया है ।


0

यदि आप JetBrains PHPStorm की तरह IDE का उपयोग कर रहे हैं , तो कृपया यह भी ध्यान दें: Run/Debug Configurationsखिड़की में, उस निर्देशिका को Test scopeसेट करने की आवश्यकता directoryऔर जहाँ आपकी निर्देशिका हैtests फ़ोल्डर स्थित है, उसे ।

यह पता लगाने के लिए मुझे निर्देशिका सेट करने में आधे घंटे का समय लगा। phpunit.pharजब तक आप परीक्षण गुंजाइश और निर्देशिका को सही ढंग से सेट करते हैं, तब तक आप वैश्विक उपयोग कर सकते हैं , आईडीई आपके लिए अन्य सामान को संभाल लेगा।


0

परीक्षण फ़ाइल में फ़ंक्शन का नाम या तो पहले से testहोना चाहिए या फ़ंक्शन से पहले जोड़ा गया कोई टिप्पणी होनी चाहिए

/** @test */

सुनिश्चित करें कि यह नहीं है

/* @test */

क्योंकि वह काम नहीं करता है। स्लैश एक के बाद दो तारांकन होने की जरूरत है।


-2

डी cmd कंसोल का उपयोग करके इस समस्या को हल किया गया जो कि एंटरली पाथ टेस्ट से गुजरता है

मुझे इसे करने का दूसरा तरीका नहीं मिला यह इस तरह से काम नहीं करता है

मुझे उम्मीद है कि यह किसी के लिए मददगार था

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