2009-11-30 8 views
7

से गतिशील रूप से PHPUnit परीक्षण बनाएं मेरे पास इनपुट और अपेक्षित आउटपुट के साथ एक डेटा फ़ाइल है। एक उदाहरण हो सकता है:डेटा-फ़ाइल

input: output: 
2  3 
3  5 
4  Exception 
5  8 
...  ... 

वर्तमान में मैं डेटा फ़ाइल से पढ़ सकते हैं और प्रत्येक {इनपुट, आउटपुट} जोड़ी के लिए एक परीक्षण करने के लिए एक कस्टम समाधान है। मैं इसे एक PHPUnit आधारित समाधान में रूपांतरित करना चाहता हूं और मैं परीक्षण नाम का उपयोग कर प्रति इनपुट एक परीक्षण करना चाहता हूं, XXertY। तो पहले तीन परीक्षणों को 2assert3(), for3assert5() और for4assertException() के लिए बुलाया जाएगा।

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

सुझाव?

उत्तर

0

ठीक है, PHP फ़ाइलें केवल टेक्स्ट फाइलें हैं, इसलिए आप एक testGenerator.php स्क्रिप्ट लिख सकते हैं जो डेटा फ़ाइल में पढ़ेगा और .php परीक्षण फ़ाइलों का एक समूह थूक जाएगा। टेस्ट जेनरेटर स्क्रिप्ट उतनी आसान होगी जितनी "रेखा को पढ़ें, इसे पार्स करें, PHP को थूक दें"। फिर, बस अपनी जेनरेटर स्क्रिप्ट को अपनी बिल्ड/टेस्ट रन प्रक्रिया के हिस्से के रूप में चलाएं, और आप जाने के लिए अच्छे हैं।

10

आप इस के लिए PHPUnit के data providers उपयोग कर सकते हैं:

<?php 

require_once 'PHPUnit/Framework/TestCase.php'; 

class ProviderTest extends PHPUnit_Framework_TestCase 
{ 
    public function testCaseProvider() 
    { 
     // parse your data file however you want 
     $data = array(); 
     foreach (file('test_data.txt') as $line) { 
      $data[] = explode("\t", trim($line)); 
     } 

     return $data; 
    } 

    /** 
    * @dataProvider testCaseProvider 
    */ 
    public function testAddition($num1, $num2, $expectedResult) 
    { 
     $this->assertEquals($expectedResult, $num1 + $num2); 
    } 
} 

?> 

और अपने test_data.txt फ़ाइल कुछ इस तरह दिखता है:

$ phpunit ProviderTest.php 
PHPUnit 3.4.12 by Sebastian Bergmann. 

...F 

Time: 0 seconds, Memory: 5.75Mb 

There was 1 failure: 

1) ProviderTest::testAddition with data set #2 ('3', '5', '7') 
Failed asserting that two strings are equal. 
--- Expected 
+++ Actual 
@@ @@ 
-7 
+8 

/Users/dana/ProviderTest.php:23 

FAILURES! 
Tests: 4, Assertions: 3, Failures: 1. 
:

1 2 3 
2 2 4 
3 5 7 

फिर परीक्षण चलाने