PHPunit में परीक्षण कैसे छोड़ें?


88

मैं जेनकिंस के संबंध में फ़ापुनिट का उपयोग कर रहा हूं, और मैं XML फ़ाइल में कॉन्फ़िगरेशन सेट करके कुछ परीक्षण छोड़ना चाहता हूं phpunit.xml

मुझे पता है कि मैं कमांड लाइन पर उपयोग कर सकता हूं:

phpunit --filter testStuffThatBrokeAndIOnlyWantToRunThatOneSingleTest

मैं उस XML फ़ाइल में कैसे अनुवाद करूं क्योंकि <filters>टैग केवल कोड-कवरेज के लिए है?

मैं इसके अलावा सभी परीक्षण चलाना चाहूंगा testStuffThatAlwaysBreaks


1
KO: परीक्षण को ठीक करने के बारे में क्या? Btw, हाय welly से ;-)
zerkms

मैंने परीक्षण नहीं लिखा है, यह कुछ अप्रासंगिक है, और यह भी कोर फ़ाइलों को बदलना नहीं चाहते हैं
आकार

संदेह से आप ऐसा कर सकते हैं। यह एक बहुत ही अजीब आवश्यकता है
झटके

पुनश्च: आपने फ़िल्टर का उल्लेख किया है - लेकिन यह आपकी मदद नहीं कर सकता, क्योंकि यह सभी मार्ग को बाहर करता है। अन्यथा <exclude>- आप के लिए काम करना होगा
zerkms

क्या आप प्रस्तावित phpunit.xml.dist फ़ाइल पोस्ट कर सकते हैं?
Fil'p

जवाबों:


167

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

$this->markTestSkipped('must be revisited.');

आप हमेशा xml config फ़ाइल में निर्देशिका या परीक्षण जोड़ सकते हैं, हालांकि, अगर यह एक नियंत्रक या समान है जो वास्तव में बहुत व्यावहारिक नहीं है क्योंकि आपके पास संभवतः उस फ़ाइल में दर्जनों अन्य परीक्षण हैं। मुझे लगता है कि अगर आपके पास इकाई परीक्षणों तक कोई पहुंच नहीं है, तो सुनिश्चित नहीं है कि मुझे समझ में क्यों आता है, तो आपके पास बाहर करने के अलावा और कोई विकल्प नहीं है।
जिंस्टमन

5
के रूप में यह एक स्थिर विधि है (कम से कम PHPUnit 3 में), और कुछ वर्ग देर से स्थैतिक बाध्यकारी afaik का उपयोग करते हैं, आपको static::markTestSkipped('');इसके बजाय करना चाहिए $this->। यह नए PHP संस्करणों में एक चेतावनी उत्पन्न करेगा। हस्ताक्षर: public static function markTestSkipped($message = '')
डैनियल डब्ल्यू।

फुल यूनिट टेस्ट फाइल का बेहतर उदाहरण चाहिए। सिर्फ एक स्निपेट नहीं।
21

@DanielW। आधिकारिक PHPUnit मैनुअल दिखा उदाहरण है$this->markTestSkipped()
nulll

@nulll आप 6.5 के सोर्सकोड में देख सकते हैं , markTestSkipped()अभी भी एक स्थिर विधि है।
डैनियल डब्ल्यू।

30

यदि आप पूरी फ़ाइल को अनदेखा कर सकते हैं तो

<?xml version="1.0" encoding="UTF-8"?>

<phpunit>

    <testsuites>
        <testsuite name="foo">
            <directory>./tests/</directory>
            <exclude>./tests/path/to/excluded/test.php</exclude>
                ^-------------
        </testsuite>
    </testsuites>

</phpunit>

यह वही है जो मैंने कोशिश की, फिर भी यह कहता है कि 893 परीक्षणों के बिना <exclude>893 परीक्षण और<exclude>
फिलीप

1
परीक्षणों को चलाने में लगभग 20 मिनट लगते हैं, क्या यह देखने का एक आसान तरीका है कि यह कितने परीक्षण चलाएगा? वर्तमान में, मुझे पहली पंक्ति के पूरा होने तक इंतजार करना होगा....... 63 / 893 ( 7%)
फ़िलिपीज़

5
@ प्रारूप: तब आपने संभवतः गलत पथ निर्दिष्ट किया था। ये मेरे लिए अच्छी तरह से काम करता है। निश्चित नहीं है कि क्या परीक्षण गिनती प्राप्त करना संभव है। पुनश्च: इकाई परीक्षण इतने लंबे समय तक नहीं चलने चाहिए। मैं @groupउनके स्वभाव द्वारा एनोटेशन और स्प्लिट टेस्ट का उपयोग करने की सलाह देता हूँ
झटके २०'१२

20

कभी-कभी यह विशेष रूप से php कोड के रूप में परिभाषित कस्टम स्थिति (नों) के आधार पर विशेष फ़ाइल से सभी परीक्षणों को छोड़ने के लिए उपयोगी है। आप आसानी से सेटअप फ़ंक्शन का उपयोग कर सकते हैं जिसमें मेकटेस्टस्कैप्ड काम करता है।

protected function setUp()
{
    if (your_custom_condition) {
        $this->markTestSkipped('all tests in this file are invactive for this server configuration!');
    }
}

your_custom_condition को कुछ स्टैटिक क्लास मेथड / प्रॉपर्टी से गुजारा जा सकता है, जो फ़्यूपुनिट बूटस्ट्रैप फ़ाइल में परिभाषित एक स्थिरांक या एक वैश्विक चर है।


Configकक्षा क्या है ? मैं इसे कहां रखूं?
cronfy

@ क्रोनफी यह किसी भी वैश्विक स्कोप सुलभ क्लास (सिंगलटन / रजिस्टर डिज़ाइन पैटर्न) या फ़्यूपुनिट में बूटस्ट्रैप फ़ाइल में वैश्विक वैरिएबल सेट हो सकता है। मूल रूप से तर्क यह है: यदि ($ परीक्षणफ्रेमटीलेफिशल्ड बोल्ड) {$ यह-> मार्कटेस्टकैप्ड (...); }
कोनराड गौल्ज़ोस्की

सशर्त निकालें और आपका उत्तर सीधे आगे होगा ... "markTestSkipped सेटअप के अंदर पूरी फ़ाइल को छोड़ने के लिए"
SparK

1
@SKK मैं आपकी बात देख रहा हूं लेकिन मैं पूरे टेस्ट क्लास की सशर्त स्किपिंग का तरीका प्रदान कर रहा था । मैंने इसे सामान्य नियम के पक्ष में करने के अपने कस्टम तरीके को हटाते हुए इसे थोड़ा बदल दिया है।
कोनराड गौल्ज़ोस्की
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.