फ़ापुनिट के साथ एकल परीक्षण विधि कैसे चलाएं?


335

मैं testSaveAndDropफ़ाइल में नाम के escalation/EscalationGroupTest.phpसाथ एक एकल परीक्षण विधि चलाने के लिए संघर्ष कर रहा हूँ phpunit। मैंने निम्नलिखित संयोजनों की कोशिश की:

phpunit EscalationGroupTest escalation/EscalationGroupTest.php --filter=escalation/EscalationGroupTest.php::testSaveAndDrop
phpunit EscalationGroupTest escalation/EscalationGroupTest.php --filter=EscalationGroupTest.php::testSaveAndDrop
phpunit EscalationGroupTest escalation/EscalationGroupTest.php --filter=EscalationGroupTest::testSaveAndDrop
phpunit EscalationGroupTest escalation/EscalationGroupTest.php --filter=testSaveAndDrop

प्रत्येक मामले में फ़ाइल में सभी परीक्षण मेथोड escalation/EscalationGroupTest.phpनिष्पादित किए जाते हैं। इसके बजाय सिर्फ एक विधि का चयन कैसे करें?

वर्ग का नाम है EscalationGroupTestऔर का संस्करण phpunit3.2.8 है।


आपके परीक्षण वर्ग का वर्ग नाम क्या है?
संप्रदाय

जवाबों:


459

निम्न आदेश एक ही विधि पर परीक्षण चलाता है:

phpunit --filter testSaveAndDrop EscalationGroupTest escalation/EscalationGroupTest.php

phpunit --filter methodName ClassName path/to/file.php

फ़पुनिट के नए संस्करणों के लिए, यह सिर्फ:

phpunit --filter methodName path/to/file.php

1
क्या EscalationGroupTest को लिखना आवश्यक है? इसका क्या उपयोग है?
मुजफ्फर

2
ठीक है मुझे मिल गया यह वर्ग का नाम है
मुजफ्फर

15
यह नाम testSaveAndDrop * के साथ परीक्षण विधि चलाएगा (उदाहरण: testSaveAndDropSomething) भी। वास्तव में चलाने के लिए TestSaveAndDrop उपयोग --filter '/ :: testSaveAndDrop $ /'
फरीद चाल्सुमोव

1
@ मुजफ्फर मुझे संदेह है, "मुझे मिल गया" व्हाट्सएप के कारण php में एक वैध पहचानकर्ता नहीं है।
जॉन मैकक्लब ने

2
यह अब काम नहीं करता है। यह सिर्फ है phpunit --filter methodName path/to/testing/file, नहीं ClassName
सीजे डेनिस

213

मैं एनोटेशन में परीक्षण को चिह्नित करना पसंद करता हूं

/**
 * @group failing
 * Tests the api edit form
 */
public function testEditAction()

फिर इसके साथ चल रहा है

phpunit --group failing

कमांड लाइन में पूर्ण पथ को निर्दिष्ट करने की आवश्यकता नहीं है, लेकिन आपको कोड को अव्यवस्थित करने के लिए नहीं, इसे कमिट करने से पहले याद रखना होगा।

आप एकल परीक्षण के लिए कई समूह भी निर्दिष्ट कर सकते हैं

/**
  * @group failing
  * @group bug2204 
  */
public function testSomethingElse()
{
}

4
मुझे यह तरीका पसंद है, क्या एनोटेशन के माध्यम से कई समूहों को असाइन करना संभव है? @group failing, Integration
डिजी ब्रायन हाई

4
हां बिल्कुल। लेकिन अल्पविराम अलग नहीं हुआ। इसका वर्णन करने का उत्तर दिया।
Iamtankist

मुझे यह तरीका बेहतर है ... संदर्भ के लिए phpunit.xml में <समूहों> तत्व का उपयोग परीक्षणों को फ़िल्टर करने के लिए भी किया जा सकता है ... इस अधिकार के तहत कुछ का उपयोग करें <phpunit>: <समूह> <शामिल> <समूह> विफल </ समूह > </ शामिल करें> </ समूहों>
निकोलस गैलर

2
लेकिन सवाल था- सिंघल टेस्ट चलाने का। इसके अलावा - असफलता नाम का समूह सबसे खराब है जिसका आप उपयोग कर सकते हैं। क्योंकि कुछ परीक्षणों में असफल होने के बाद आप फ़पुनिट - ग्रूप को बिना समूह दिए उन्हें विफल परीक्षण चलाने में विफल कर सकते हैं। यह भ्रमित करने वाला है।
राफेल मनिच

सबसे अच्छा जवाब! अगर यह @dependsदूसरे से जुड़े परीक्षणों को इंगित करने के लिए है और इस प्रकार @groupएनोटेशन का उपयोग करना है, तो इसे दूसरे से मामले में कोई एकल परीक्षण नहीं है ।
सेंटुरियन

117

यहाँ अधिक सामान्य उत्तर है:

यदि आप सुनिश्चित हैं कि विधि का नाम अद्वितीय है, तो आप केवल विधि नाम से फ़िल्टर कर सकते हैं (यह मेरे लिए काम करता है)

phpunit --filter {TestMethodName}

हालाँकि यह फ़ाइल पथ / संदर्भ को भी निर्दिष्ट करने के लिए सुरक्षित है

phpunit --filter {TestMethodName} {FilePath}

उदाहरण:

phpunit --filter testSaveAndDrop reference/to/escalation/EscalationGroupTest.php

त्वरित नोट: मैंने देखा है कि अगर मेरे पास एक फ़ंक्शन है testSaveऔर testSaveAndDropकमांड का उपयोग करने वाला नाम का एक अन्य फ़ंक्शन phpunit --filter testSaveभी चलेगा testSaveAndDropऔर कोई भी अन्य फ़ंक्शन जो testSave*इसके साथ शुरू होता है , यह अजीब है !!


4
यह बिल्कुल भी अजीब नहीं है, यह मूल रूप से एक विकल्प मैच है। यदि आप ऐसा व्यवहार चाहते हैं, तो स्ट्रिंग टोकन के अंत का उपयोग करें:/testSave$/
क्रिश्चियन

क्या होगा यदि आप केवल फ़ाइल पथ निर्दिष्ट करना चाहते हैं तो उस फ़ाइल के सभी परीक्षण चलते हैं?
still_dreaming_1

48

निम्नलिखित कमांड बिल्कुल testSaveAndDrop परीक्षण निष्पादित करेगा ।

phpunit --filter '/::testSaveAndDrop$/' escalation/EscalationGroupTest.php

4
मेरे लिए काम नहीं किया। अंत में के \bबजाय का उपयोग $कर चाल है --filter '/::testSaveAndDrop\b/':।
जो

1
विधि नाम अंत के दोनों '/::testSaveAndDrop\b/'और '/::testSaveAndDrop$/'इस तरह मेरे लिए काम किया phpunit --filter ClassName::methodName$और phpunit --filter ClassName::methodName\b(लिनक्स पर)
वेलेंटाइन शि

22

कई तरह से लार्वा में phpunit परीक्षण चलाने के लिए ..

vendor/bin/phpunit --filter methodName className pathTofile.php

vendor/bin/phpunit --filter 'namespace\\directoryName\\className::methodName'

परीक्षण एकल वर्ग के लिए:

vendor/bin/phpunit --filter  tests/Feature/UserTest.php
vendor/bin/phpunit --filter 'Tests\\Feature\\UserTest'
vendor/bin/phpunit --filter 'UserTest' 

परीक्षण एकल विधि के लिए:

 vendor/bin/phpunit --filter testExample 
 vendor/bin/phpunit --filter 'Tests\\Feature\\UserTest::testExample'
 vendor/bin/phpunit --filter testExample UserTest tests/Feature/UserTest.php

नेमस्पेस के भीतर सभी वर्गों से परीक्षण चलाने के लिए:

vendor/bin/phpunit --filter 'Tests\\Feature'

अधिक तरीके से रन टेस्ट के लिए और देखें


21

तो, कुछ इस तरह

phpunit --filter 'EscalationGroupTest::testSaveAndDrop' EscalationGroupTest escalation/EscalationGroupTest.php 

बिना =और साथ के'

https://phpunit.de/manual/3.7/en/textui.html


नहीं यह काम नहीं करता है। कक्षा में सभी परीक्षणों को EscalationGroupTestसंसाधित किया जा रहा है।
एलेक्स

अभी भी सभी 9 परीक्षण चलाए जा रहे हैं। फ़पुनिट संस्करण 3.2.8
एलेक्स

2
--filterफ़ाइल नाम से पहले ले जाएँ और चीजें सही काम करना चाहिए।
स्लेइस

PHPUnit 4.8.10 पर मेरे लिए काम किया
असफ़

यह मुझे No tests executed!PHPUnit 4.8.35 @Schleis पर देता है आपने वास्तव में कमांड को कैसे बदला?
एंडरू

14
  • अपने प्रोजेक्ट रूट डायरेक्टरी के अंदर इसे चलाएं जिसका उपयोग मैं लारवल रूट डायरेक्टरी में कर रहा हूं।

vendor/bin/phpunit --filter 'Your method name'

कस्टम विधि नाम के साथ उदाहरण।

 /** @test //Initilize this for custom method name, without test keyword
  *  
  * Test case For Dashboard When User Not logged In it will redirect To login page
  */
  public function only_logged_in_user_see_dashboard()
  {
    $response = $this->get('/dashboard')
                   ->assertRedirect('/login');
  }

टेस्ट कीवर्ड के साथ उदाहरण

/**
* A basic test example.
*
* @return void
*/
 public function testBasicTest()
 {
  $this->assertTrue(true);
 }

1
यकीन है कि मैं एक शुरुआत कर रहा हूं अब आगामी प्रतिक्रियाओं पर अधिक विशिष्ट कोड की कोशिश करूंगा
Connectify_user

7

यदि आप नेटबेस में हैं, तो आप परीक्षण विधि में राइट क्लिक कर सकते हैं और "रन फोकसेड टेस्ट विधि" पर क्लिक कर सकते हैं।

फोकस्ड टेस्ट मेथड मेनू को रन करें


7

आप यह कोशिश कर सकते हैं कि मैं एकल टेस्ट केस चलाने में सक्षम हूं

phpunit tests/{testfilename}

उदाहरण के लिए:

phpunit tests/StackoverflowTest.php

अगर आप लारवेल 5.5 ट्राय में सिंगल टेस्ट केस चलाना चाहते हैं

vendor/bin/phpunit tests/Feature/{testfilename} 

vendor/bin/phpunit tests/Unit/{testfilename} 

उदाहरण के लिए:

vendor/bin/phpunit tests/Feature/ContactpageTest.php 

vendor/bin/phpunit tests/Unit/ContactpageTest.php

सवाल यह था कि सिंगल टेस्ट METHOD (क्लास नहीं) कैसे चलाया जाए
अलेक्सी अकीरीकिन

4

आपके परीक्षण किए जाने का कारण यह है कि --filterफ़ाइल नाम के बाद आपके पास ध्वज है। PHPUnit सभी विकल्पों को नहीं पढ़ रहा है और इसलिए सभी परीक्षण मामलों को चला रहा है।

मदद स्क्रीन से:

 Usage: phpunit [options] UnitTest [UnitTest.php]
        phpunit [options] <directory>

तो --filterपरीक्षण फ़ाइल से पहले तर्क को स्थानांतरित करें जो आप @Alex और @Ferid Mövsümov उत्तर में उल्लिखित हैं। और आपके पास केवल वही परीक्षण होना चाहिए जो आप चलाना चाहते हैं।


मुझे नहीं लगता कि यह मूल प्रश्न को संबोधित करता है ... मुझे एक इकाई में कई परीक्षणों में से एक फ़ाइल में केवल एक परीक्षण चलाने की आवश्यकता की एक ही समस्या थी, और फिल्टर का उपयोग करने वाले दो अन्य उत्तर मेरे लिए काम करते थे
jfoo

@jfoo ओपी के आदेशों में से एक समस्या यह थी कि --filterविकल्प फ़ाइल नाम के बाद था। अन्य दो उत्तरों में सही उत्तर था लेकिन यह नहीं बताया कि फ़िल्टर क्यों लगाया जा रहा है।
स्लेइस

2

यदि आप XML कॉन्फ़िगरेशन फ़ाइल का उपयोग कर रहे हैं, तो आप phpunitटैग के अंदर निम्नलिखित जोड़ सकते हैं :

<groups>
  <include>
    <group>nameToInclude</group>
  </include>
  <exclude>
    <group>nameToExclude</group>
  </exclude>
</groups>

Https://phpunit.de/manual/current/en/appendixes.configuration.html देखें


1

मुझे हालांकि पार्टी के लिए देर हो चुकी है। लेकिन व्यक्तिगत रूप से मुझे पूरी लाइन लिखने से नफरत है।

इसके बजाय, मैं .bash_profile फ़ाइल में निम्न शॉर्टकट्स का उपयोग करता हूं, किसी भी नए उपनाम को जोड़ने के बाद फ़ाइल को स्रोत .bash_profile पर सुनिश्चित करें अन्यथा यह काम नहीं करेगा।

alias pa="php artisan"
alias pu="vendor/bin/phpunit" 
alias puf="vendor/bin/phpunit --filter"

उपयोग:

puf function_name

puf filename

यदि आप विज़ुअल स्टूडियो कोड का उपयोग करते हैं तो आप अपने परीक्षणों को हवा देने के लिए निम्न पैकेज का उपयोग कर सकते हैं।

Package Name: Better PHPUnit
Link: https://marketplace.visualstudio.com/items?itemName=calebporzio.better-phpunit

आप सेटिंग में कीबाइंडिंग सेट कर सकते हैं। मैं अपने मैक में कमांड + टी बाइंडिंग का उपयोग करता हूं।

अब एक बार जब आप अपने कर्सर को किसी फ़ंक्शन पर रखते हैं और फिर कुंजी बाइंडिंग का उपयोग करते हैं तो यह स्वचालित रूप से उस एकल परीक्षण को चलाएगा।

यदि आपको पूरी कक्षा चलाने की आवश्यकता है तो कर्सर को कक्षा के ऊपर रखें और फिर कुंजी बंधन का उपयोग करें।

अगर आपके पास कोई और चीज है तो हमेशा टर्मिनल से तौबा करें

हैप्पी कोडिंग!


0

एकल परीक्षण विधि को चलाने के लिए आपको --filter का उपयोग करना चाहिए php phpunit --filter "/::testMethod( .*)?$/" ClassTest ClassTest.php

उपरोक्त फ़िल्टर टेस्टमेथोड को अकेले चलाएगा।

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