मैंने अभी-अभी PHPUnit का उपयोग करना शुरू किया है और मैं सोच रहा हूँ कि क्या किसी चर की सामग्री को डंप करने के तरीके में कोई निर्माण है?

उपयोग-मामला यह है कि चूंकि मैं पहले से ही उस कोड से बात कर रहा हूं जिसे मैं विकसित कर रहा हूं, मैं PHPUnit का उपयोग न केवल उस कोड की स्थिरता का परीक्षण करने के लिए कर सकता हूं बल्कि विकास के दौरान डीबग जानकारी आउटपुट करने के लिए भी कर सकता हूं।

मुझे पता है कि xdebug मेरे लिए इस अंतर को भर सकता है, लेकिन कभी-कभी मेरे आईडीई डीबगर के साथ झुकाव के बजाय आउटपुट में कुछ जानकारी डंप करना आसान होता है, जो एक बग के कारण का पता लगाने के लिए अधिक उपयोगी होता है।

मुझे पता है कि मैं सिर्फ एक नियमित var_dump कर सकता हूं, मैं बस सोच रहा हूं कि PHPUnit के पास इसके लिए एक इंटरफ़ेस है या नहीं।

धन्यवाद!

संपादित करें:

डेविड के जवाब के बाद इसे एक साथ हैक करने का फैसला किया।

किसी भी तरह से एक सही समाधान नहीं है, लेकिन यह मेरे लिए काम करता है। अगर किसी को दिलचस्पी है:

*** PHPUnit-3.6.3/PHPUnit/Framework/TestCase.php    2011-11-09 12:25:38.000000000 -0500
--- PHPUnit/Framework/TestCase.php  2011-11-09 15:27:02.193317219 -0500
***************
*** 291,296 ****
--- 291,298 ----
       * @var boolean
       */
      private $outputBufferingActive = FALSE;
+   
+   public static $ob_output = array();

      /**
       * Constructs a test case with the given name.
***************
*** 913,921 ****
--- 915,927 ----
          }

          try {
+           ob_start();
              $testResult = $method->invokeArgs(
                $this, array_merge($this->data, $this->dependencyInput)
              );
+           
+           Static::$ob_output[ $method->name ] = ob_get_contents();
+           ob_end_clean();
          }

          catch (Exception $e) {

और VisualPHPUnit के साथ प्रयोग के लिए:

*** NSinopoli-VisualPHPUnit-b7ba91a/ui/test.html    2011-11-08 15:38:44.000000000 -0500
--- ui/test.html    2011-11-09 15:38:44.797329455 -0500
***************
*** 3,15 ****
                                  <div class="name" title="Test Status: <?php echo ucfirst($test['status']);?>"><?php echo $test['name'];?></div> 
                                  <div class="stats"><?php echo $test['message'];?></div>
                                  <div class="expand button"><?php echo $test['expand'];?></div>
!                                 <div class="more test <?php echo $test['display'];?>"> 
                                      <div class="variables rounded <?php echo $test['variables_display'];?>"> 
                                          <pre><?php echo $test['variables_message'];?></pre> 
!                                     </div> 
                                      <div class="stacktrace rounded <?php echo $test['trace_display'];?>"> 
                                          <pre><?php echo $test['trace_message'];?></pre> 
!                                     </div> 
                                  </div> 
                              </div> 
                              <?php if ( $test['separator_display'] ) { ?>
--- 3,21 ----
                                  <div class="name" title="Test Status: <?php echo ucfirst($test['status']);?>"><?php echo $test['name'];?></div> 
                                  <div class="stats"><?php echo $test['message'];?></div>
                                  <div class="expand button"><?php echo $test['expand'];?></div>
!                                 <div class="more test <?php echo $test['display'];?>">
                                      <div class="variables rounded <?php echo $test['variables_display'];?>"> 
                                          <pre><?php echo $test['variables_message'];?></pre> 
!                                     </div>
                                      <div class="stacktrace rounded <?php echo $test['trace_display'];?>"> 
                                          <pre><?php echo $test['trace_message'];?></pre> 
!                                     </div>
!                                     <?php if (isset(PHPUnit_Framework_TestCase::$ob_output[$test['name']])) { ?>
!                                     <h3>OB Output</h3>
!                                     <div class="variables rounded">
!                                         <pre><?php echo PHPUnit_Framework_TestCase::$ob_output[$test['name']]; ?></pre>
!                                     </div>
!                                     <?php } ?>
                                  </div> 
                              </div> 
                              <?php if ( $test['separator_display'] ) { ?>
18
Naatan 9 नवम्बर 2011, 23:21

5 जवाब

सबसे बढ़िया उत्तर

अद्यतन:

ध्यान दें कि यह उत्तर केवल PHPUnit 3.6.0 से 3.6.3 के लिए प्रासंगिक है।

जब PHPUnit 3.6.4 जारी किया जाता है तो यह किसी भी आउटपुट को डिफ़ॉल्ट रूप से अनुमति नहीं देगा।


मूल उत्तर

यदि आप निगले गए आउटपुट को देखना चाहते हैं तो आप phpunit --debug का उपयोग कर सकते हैं। यह सभी आउटपुट पेशकश को चालू कर देगा और आपके var_dumps को दिखाएगा।

नमूना जाँच:

<?php

class OutputTest extends PHPUnit_Framework_TestCase {

    public function testOutput() {
        var_dump("HI!");
        $this->assertTrue(true);
    }   

}

चल रहा है phpunit outputTest.php

PHPUnit 3.6.2 by Sebastian Bergmann.

.

Time: 0 seconds, Memory: 3.25Mb

OK (1 test, 1 assertion)

चल रहा है phpunit --debug outputTest.php

PHPUnit 3.6.2 by Sebastian Bergmann.


Starting test 'OutputTest::testOutput'.
.string(3) "HI!"


Time: 0 seconds, Memory: 3.25Mb

OK (1 test, 1 assertion)
29
Community 20 जून 2020, 12:12

ob_flush() का उपयोग करना भी काम करेगा, उदा। आपके परीक्षण में

var_dump($foo);
ob_flush();

लेकिन ध्यान दें कि यह अब तक PHPUnit द्वारा उत्पन्न किसी भी आउटपुट को भी फ्लश करेगा।

14
Gordon 10 नवम्बर 2011, 19:30

कोशिश करें print_r() टर्मिनल में मेरे लिए काम करता है।

10
Paul Ciorogar 18 जुलाई 2013, 12:22

नहीं, और वास्तव में PHPUnit 3.6 एक परीक्षण से आने वाले सभी आउटपुट को निगल जाएगा (शायद केवल सख्त मोड में)।

4
David Harkness 10 नवम्बर 2011, 00:02

जैसा कि अन्य ने एक पैरामीटर के रूप में --debug जोड़ने की सिफारिश की और फिर इसकी सामग्री का निरीक्षण करने के लिए dump($your_variable); का उपयोग करें। बस अगर मैं Drupal 8 और PHPUnit 6.5.13 पर काम कर रहा हूं। यहाँ dump का आउटपुट उदाहरण दिया गया है:

enter image description here

3
Beto Aveiga 3 जिंदा 2019, 17:16