विशिष्ट phpunit xml टेस्टसुइट कैसे चलाएं?


85

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

$ phpunit --configuration config.xml

config.xml:

<testsuites>
    <testsuite name="Library">
        <directory>library</directory>
    </testsuite>
    <testsuite name="XXX_Form">
        <file>library/XXX/FormTest.php</file>
        <directory>library/XXX/Form</directory>
    </testsuite>
</testsuites>

जवाबों:


129

यहाँ कोड है जैसे कि PHPUnit 3.7.13

$ phpunit --configuration config.xml --testsuite Library
$ phpunit --configuration config.xml --testsuite XXX_Form

अगर आप टेस्ट सूट का समूह चलाना चाहते हैं तो आप ऐसा कर सकते हैं

<testsuites>
  <testsuite name="Library">
    <directory>library</directory>
  </testsuite>
  <testsuite name="XXX_Form">
    <file>library/XXX/FormTest.php</file>
    <directory>library/XXX/Form</directory>
  </testsuite>
  <testsuite name="Both">
    <directory>library</directory>
    <file>library/XXX/FormTest.php</file>
    <directory>library/XXX/Form</directory>
  </testsuite>
</testsuites>

फिर

$ phpunit --configuration config.xml --testsuite Both

दुर्भाग्य से PHPUnit वर्तमान में इस तरह के नेस्टेड परीक्षणों का समर्थन नहीं करता है

<testsuites>
    <testsuite name="Both">
      <testsuite name="Library">
        <directory>library</directory>
      </testsuite>
      <testsuite name="XXX_Form">
        <file>library/XXX/FormTest.php</file>
        <directory>library/XXX/Form</directory>
      </testsuite>
  </testsuite>
</testsuites>

तो अगर आप टेस्ट सूट के समूहों को चलाना चाहते हैं तो आपको xml कॉन्फ़िगरेशन का दोहराव होना चाहिए!


मुझे समस्या है कि <डायरेक्टरी> को केवल अनदेखा किया जाता है। कोई परीक्षण निष्पादित नहीं किया गया। यदि मैं <फ़ाइल> के साथ निर्दिष्ट करता हूं, तो वे ठीक चलते हैं, लेकिन मैं उन सभी को मैन्युअल रूप से निर्दिष्ट नहीं कर सकता! वे Test.php फ़ाइल और वर्ग नाम सम्मेलन का पालन करते हैं। विचार?
अलेक्जेंडर मोरलैंड

क्या आप अपनी कॉन्फ़िग फ़ाइल साझा कर सकते हैं? मामूली विवरण अक्सर संदिग्ध होते हैं।
जोश वुडकॉक


20

यह PHPUnit के वर्तमान संस्करणों में संभव नहीं है, क्योंकि इन संदेशों को phpunit-user मेलिंग सूची में दर्शाया गया है: http://thread.gmane.org/gmane.comp.php.phpunit.user/1302

लेकिन एक विकल्प है, आप बस phpunit के लिए एक मार्ग पारित कर सकते हैं।

phpunit library/XXX

यह लाइब्रेरी / XXX निर्देशिका में सभी परीक्षण चलाएगा

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


ठीक है, जैसा कि आप मेरी पोस्टिंग में देख सकते हैं, यह बिल्कुल वैसी नहीं है जैसी मुझे चाहिए
एंड्रियास लिंडेन

फिर कुछ भी नहीं है जो आप कर सकते हैं, जैसा कि मेरे उत्तर की पहली कड़ी में बताया गया है।
एंटी वीराना

3

Phpunit 6.1 के रूप में आप xml config फाइल में विशेषता का उपयोग कर सकते हैं defaultTestSuite, यह एक डिफ़ॉल्ट विकल्प का उपयोग करने phpunit --testsuite xxxजैसा है और इसे ओवरराइड किया जाता है।


1

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


1

यहाँ अन्य उत्तर सही हैं। आप एक xml कॉन्फिगरेशन का उपयोग करके ऐसा नहीं कर सकते हैं, हालांकि आप php में एक ही प्रकार के कॉन्फिगरेशन बना सकते हैं।

यह निश्चित रूप से सबसे सुंदर चीज नहीं है, लेकिन यह आपको वह कार्यक्षमता प्रदान करनी चाहिए जिसकी आपको आवश्यकता होगी।

आपने xml कॉन्फिगरेशन प्रदान किया है

<testsuites>
  <testsuite name="Library">
    <directory>library</directory>
  </testsuite>
  <testsuite name="XXX_Form">
    <file>library/XXX/FormTest.php</file>
    <directory>library/XXX/Form</directory>
  </testsuite>
</testsuites>

Hypothetically, मान लें कि आपकी निर्देशिका "लाइब्रेरी" में 3 फाइलें हैं:

library
   XXX    
     FormTest.php
   Unit
     unittest1.php
     unittest2.php

और यह कि प्रत्येक फाइलों में 1 नामकरण सही नामकरण द्वारा होता है, उदाहरण: FormTest में testForm () होता है

कॉन्फ़िगरेशन के लिए हम एक ऐसा कॉन्फिगरेशन बनाएंगे जिसमें सब कुछ हो:

<?php
include_once "library/XXX/FormTest.php";
include_once "library/Unit/unittest1.php";
include_once "library/Unit/unittest2.php";

फिर हम phpunit नामकरण सम्मेलनों द्वारा एक वर्ग बनाएंगे। आप इसे जो चाहें नाम दे सकते हैं क्योंकि हम वास्तव में इसका उपयोग कभी नहीं करेंगे ...

class LibraryConfigTest extends PHPUnit_Framework_TestCase {

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

/**
 * All Tests in Library
 * @group Library
**/
   public function testLibrary() {
      UnitTest1::testUnit1();
      UnitTest2::testUnit2();
      FormTest::testForm();
   }

/**
 * All Form tests in library/XXX
 * @group XXX_Form
**/
   public function testForm() {
      FormTest::testForm();
   }
 }
 ?>

अब कार्यक्षमता प्राप्त करने के लिए आप जिस समूह को चाहते हैं, उसके विरुद्ध "कॉन्फिग" चलाएं।

phpunit --group XXX_Form library_config.php
phpunit --group Library library_config.php

जैसा कि मैंने कहा, यह बदसूरत है और निश्चित रूप से अच्छा कोड नहीं है क्योंकि इसमें निरंतर रखरखाव की आवश्यकता होगी, लेकिन यह आपको वह कार्यक्षमता देगा जिसकी आप तलाश कर रहे हैं।

उम्मीद है कि बर्गमैन अपने अगले दौर में इस कार्यक्षमता को जोड़ देगा, हालांकि इसकी संभावना नहीं लगती है क्योंकि वह बहुत ज्यादा इसे अनदेखा करता प्रतीत होता है

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