2013-03-08 8 views
7

मेरे पास एक PHP परिनियोजन स्क्रिप्ट है जिसे मैं पहले PHPUnit परीक्षणों को चलाने के लिए चाहता हूं, और परीक्षण विफल होने पर रोकें। मैं इसे बहुत गुगल रहा हूं, और कमांड लाइन उपकरण की बजाय php से चल रहे यूनिट परीक्षणों पर दस्तावेज़ ढूंढना बहुत मुश्किल है।क्या आप एक स्क्रिप्ट से PHPUnit परीक्षण चला सकते हैं?

$unit_tests = new PHPUnit('my_tests_dir'); 
$passed = $unit_tests->run(); 

अधिमानतः एक समाधान है कि मुझे आवश्यकता नहीं है मैन्युअल रूप से प्रत्येक टेस्ट स्वीट निर्दिष्ट करने के लिए:

PHPUnit के नवीनतम संस्करण के लिए, आप की तरह कुछ कर सकते हैं।

+0

PHPUnit जहाज। आप [testrunner में एक नज़र डालें] (https://github.com/sebastianbergmann/phpunit/blob/master/PHPUnit/TextUI/TestRunner.php) इसमें एक स्क्रिप्ट से phpunit चलाने के लिए कोड शामिल है। – hakre

+0

अच्छा संकेत! क्या मेरे सभी टेस्ट सूट को चलाने के लिए कोई पूर्व-लागू तरीका है? – Charles

+0

मैं थोड़ा आश्चर्यचकित हूं कि यह करना बहुत आम बात नहीं है। तैनाती की तरह कुछ करते समय स्वचालित रूप से अपने सभी यूनिट परीक्षणों को चलाने का कोई बेहतर तरीका है? – Charles

उत्तर

5

यह पता चल:

$phpunit = new PHPUnit_TextUI_TestRunner; 

try { 
    $test_results = $phpunit->dorun($phpunit->getTest(__DIR__, '', 'Test.php')); 
} catch (PHPUnit_Framework_Exception $e) { 
    print $e->getMessage() . "\n"; 
    die ("Unit tests failed."); 
} 
+0

उपरोक्त नमूने में, हम $ test_results ऑब्जेक्ट से टेक्स्ट रिपोर्ट विवरण कैसे प्राप्त कर सकते हैं? – emeraldjava

5

ऐसा करने का सबसे आसान तरीका क्लास PHPUnit_TextUI_Command की वस्तु को तुरंत चालू करना है।

require '/usr/share/php/PHPUnit/Autoload.php'; 

function dummy($input) 
{ 
    return ''; 
} 

//Prevent PHPUnit from outputing anything 
ob_start('dummy'); 

//Run PHPUnit and log results to results.xml in junit format 
$command = new PHPUnit_TextUI_Command; 
$command->run(array('phpunit', '--log-junit', 'results.xml', 'PHPUnitTest.php'), 
       true); 

ob_end_clean(); 

इस तरह के परिणाम JUnit प्रारूप में results.xml फ़ाइल कि पार्स किया जा सकता में लॉग इन किया जाएगा:

तो यहाँ एक उदाहरण है। यदि आपको एक अलग प्रारूप की आवश्यकता है तो आप documentation देख सकते हैं। इसके अलावा आप रन विधि में पारित सरणी को बदलकर और विकल्प जोड़ सकते हैं।

0

यह PHPUnit की तरह प्रतीत नहीं होता है किसी भी अंतर्निहित विन्यास यह (कम से कम PHPUnit 5.7 के रूप में नहीं) प्रतिक्रिया में सीधे इसके उत्पादन डंपिंग से रोकने के लिए है।

तो, मैं ob_start इस्तेमाल किया एक चर करने के लिए उत्पादन अलग धकेलना, और स्क्रिप्ट को रोकने से PHPUnit को रोकने के लिए false को doRun का तीसरा तर्क स्थापित करने के लिए: स्रोत के साथ

<?php 

$suite = new PHPUnit_Framework_TestSuite(); 
$suite->addTestSuite('App\Tests\DatabaseTests'); 

// Shunt output of PHPUnit to a variable 
ob_start(); 
$runner = new PHPUnit_TextUI_TestRunner; 
$runner->doRun($suite, [], false); 
$result = ob_get_clean(); 

// Print the output of PHPUnit wherever you want 
print_r($result); 
संबंधित मुद्दे