2012-01-09 10 views
11

मैं अपने phpunit परीक्षणों में echo सामान की कोशिश कर रहा हूं लेकिन अब तक कोई भाग्य नहीं है।phpunit परीक्षणों में गूंज

मैंने एक्सएमएल कॉन्फ़िगरेशन फ़ाइल के बारे में प्रलेखन पढ़ा और स्पष्ट रूप से debug पैरामीटर जो मैं ढूंढ रहा हूं। दुर्भाग्य से यह अभी भी काम नहीं करता है।

<?xml version="1.0" encoding="UTF-8"?> 
<phpunit colors="true" 
     processIsolation="true" 
     verbose="true" 
     debug="true"> 
</phpunit> 

दोनों processIsolation और verbose स्वीकार किए जाते हैं लेकिन debug नहीं है: किसी भी तरह यहाँ मेरी एक्सएमएल कॉन्फ़िग फ़ाइल है।

आदेश वास्तव में बहुत ठीक काम करता है जब मैं सीधे इसे पारित करने के लिए इस तरह PHPUnit:

phpunit --debug MyTest.php # here stuff is echoed correctly 

लेकिन ऐसा लगता है यह नजरअंदाज कर दिया है फ़ाइल XML config के साथ।

उत्तर

15

PHPUnit >3.6.4 (और सभी 3.5.* संस्करण) के वर्तमान संस्करण एक परीक्षण मामले में बस echo सबकुछ प्रिंट करेंगे।

<?php 

class OutputTestCase extends PHPUnit_Framework_TestCase { 

    public function testEcho() { 
     echo "Hi"; 
    } 
} 

पैदा करता है:

phpunit foo.php 
PHPUnit 3.6.7 by Sebastian Bergmann. 

.Hi 

Time: 0 seconds, Memory: 3.25Mb 

OK (1 test, 0 assertions) 

तो अगर आप एक पुराने संस्करण पर 3.6 सिर्फ उन्नयन :)

+2

मैं 3.6.3 पर हूँ पहले से ही ऐसा मुझे लगता है कि नहीं हो सकता। आपने आउटपुटटेस्टकेस कैसे लॉन्च किया? Cuz अगर आपने इसे phpunit --debug आउटपुटटेस्टकेस.एफ़ के साथ लॉन्च किया है तो हाँ यह काम करता है लेकिन अन्यथा यह नहीं करता है। – nourdine

+2

जैसा कि मैंने आपको बताया है ** काम करने के लिए ** ** phpunit> 3.6.4' की आवश्यकता है। 3.6.3 के साथ आप बिना आउटपुट के आउटपुट प्राप्त करेंगे --debug। यदि आप अपग्रेड करते हैं तो यह PHPUnit में व्यवहार के रूप में काम करेगा :) – edorian

+7

इसके लिए यह क्या है इसके लिए संस्करण 4.1 पर भी काम नहीं लगता है, यहां तक ​​कि --debug विकल्प के साथ भी ... –

3

सुनिश्चित करें कि आप कॉल नहीं करते बाहर निकलें() या मारने()। PHPUnit echo कथन बफर करता है और यदि आपकी स्क्रिप्ट परीक्षण के दौरान निकलती है तो बफर को आउटपुट के साथ खो दिया जाएगा।

1

processIsolation परीक्षणों के आउटपुट को दबा रहा है ताकि आपको इसे अक्षम कर सकें। debug ध्वज के साथ बातचीत शायद एक निरीक्षण इस के साथ पेश किया गया था: https://github.com/sebastianbergmann/phpunit/pull/1489

+2

हालांकि यह लिंक प्रश्न का उत्तर दे सकता है, लेकिन यहां उत्तर के आवश्यक हिस्सों को शामिल करना बेहतर है और संदर्भ के लिए लिंक प्रदान करना बेहतर है। लिंक किए गए पृष्ठ में परिवर्तन होने पर लिंक-केवल उत्तर अमान्य हो सकते हैं। - [समीक्षा से] (/ समीक्षा/कम गुणवत्ता वाली पोस्ट/13 9 15236) – Serjik

+0

मुझे समझ में नहीं आता, आपका क्या मतलब है .. सभी प्रासंगिक जानकारी उत्तर में है। –

+0

स्वीकार्य उत्तर को देखें, यह पूरी तरह से वर्णित है और उदाहरण प्रदान किया गया है, आपके दर्शक पूरे ब्रह्मांड को केवल प्रश्न पूछने वाले नहीं हैं – Serjik

0

मामले में अपने परीक्षण एक लंबा समय लगता है और आप इस प्रक्रिया के दौरान उत्पादन को देखने के लिए, अपने परीक्षण वर्ग के लिए निम्न विधि जोड़ने चाहते हैं:

protected function prontoPrint($whatever = 'I am printed!') 
{ 
    // if output buffer has not started yet 
    if (ob_get_level() == 0) { 
     // current buffer existence 
     $hasBuffer = false; 
     // start the buffer 
     ob_start(); 
    } else { 
     // current buffer existence 
     $hasBuffer = true; 
    } 

    // echo to output 
    echo $whatever; 

    // flush current buffer to output stream 
    ob_flush(); 
    flush(); 
    ob_end_flush(); 

    // if there were a buffer before this method was called 
    //  in my version of PHPUNIT it has its own buffer running 
    if ($hasBuffer) { 
     // start the output buffer again 
     ob_start(); 
    } 
} 

अब जब भी आप अपने परीक्षण वर्ग के अंदर $this->prontoPrint($variable) कहते हैं, इसे तुरंत कंसोल में पाठ दिखाई देगा। मैंने फ़ंक्शन लिखने के लिए इस php.net comment का उपयोग किया था।

PHPUnit 5.7.21PHP 5.6.31 with Xdebug 2.5.5

+0

किसी भी तरह से यह समाधान प्रयुक्त बफर को साफ़ नहीं करता है - शायद आप इस संदेश से बचने के लिए इसे फिर से लिख सकते हैं: 'टेस्ट कोड या परीक्षण कोड (केवल) अपने स्वयं के आउटपुट बफर बंद नहीं किया था ' – serup