2008-09-15 23 views

उत्तर

0

मैंने ज़ेंड_Test का उपयोग नहीं किया है, लेकिन मैंने Zend_MVC और इसी तरह के ऐप्स का उपयोग करके ऐप्स के खिलाफ परीक्षण लिखे हैं। सबसे बड़ा हिस्सा आपके परीक्षण सेटअप में पर्याप्त बूटस्ट्रैप कोड प्राप्त कर रहा है।

14

मैं सभी नियंत्रकों का पूरी तरह से परीक्षण करने के लिए Zend_Test का उपयोग कर रहा हूं। सेट अप करना काफी आसान है, क्योंकि आपको केवल अपनी बूटस्ट्रैप फ़ाइल सेट अप करना है (बूटस्ट्रैप फ़ाइल को स्वयं को फ्रंट कंट्रोलर नहीं भेजना चाहिए!)। मेरे आधार परीक्षण मामले वर्ग इस तरह दिखता है:

abstract class Controller_TestCase extends Zend_Test_PHPUnit_ControllerTestCase 
{ 
    protected function setUp() 
    { 
     $this->bootstrap=array($this, 'appBootstrap'); 
     Zend_Auth::getInstance()->setStorage(new Zend_Auth_Storage_NonPersistent()); 
     parent::setUp(); 
    } 

    protected function tearDown() 
    { 
     Zend_Auth::getInstance()->clearIdentity(); 
    } 

    protected function appBootstrap() 
    { 
     Application::setup(); 
    } 
} 

जहां Application::setup(); सभी सेटअप अप कार्यों के लिए जो भी वास्तविक आवेदन की स्थापना करता है। एक साधारण परीक्षण तो इस प्रकार दिखाई देगा:

class Controller_IndexControllerTest extends Controller_TestCase 
{ 
    public function testShowist() 
    { 
     $this->dispatch('/'); 
     $this->assertController('index'); 
     $this->assertAction('list'); 
     $this->assertQueryContentContains('ul li a', 'Test String'); 
    } 
} 

बस इतना ही ...

+0

आप इस पर थोड़ा और विस्तार से बता सकते हैं क्या है? मुझे आपकी सारणी टेस्टकेस कक्षा पसंद है! आप अपना कंट्रोलर_TestCase कहां डालते हैं? क्या आपको किसी भी फाइल की आवश्यकता/शामिल करने की आवश्यकता है? आप परीक्षा कैसे चलाते हैं? क्या आप कमांड लाइन के माध्यम से PHPUnit का उपयोग करते हैं, या आईडीई में प्लगइन के साथ? धन्यवाद! – Andrew

+3

मैंने अपने परीक्षण/नियंत्रक निर्देशिका में Controller_TestCase डाला - वह निर्देशिका है जहां सभी नियंत्रक परीक्षण के मामले स्थित हैं। आम तौर पर मैं यूनिट-परीक्षण चलाते समय ऑटो-लोडिंग का उपयोग नहीं करता लेकिन यदि मैं नियंत्रक परीक्षण करता हूं, तो मैं ऑटो-लोडिंग का उपयोग करने के लिए ज़ेंड_लोडर :: रजिस्टरऑटोलोड() का उपयोग करता हूं क्योंकि यह बहुत है ... –

+2

... निर्भरताओं को ट्रैक करना मुश्किल है एमवीसी चल रहा है। आपको बस यह सुनिश्चित करना होगा कि आप नामकरण सम्मेलन का पालन करें और Zend_Loader आपकी फाइलें पायेगा (set_path सेट करें)। मेरे परीक्षण चलाने के लिए मैं PHPUnit की सीएलआई का उपयोग करता हूं क्योंकि मुझे ग्रहण पीडीटी में PHPUnit एकीकरण पसंद नहीं है। यह है ... –

7

वे Zend डेवलपर जोन, जो PHPUnit को शामिल किया गया पर एक "Introduction to the Art of Unit Testing" है।

+0

बहुत अच्छा पढ़ा। –

+0

लिंक के लिए धन्यवाद। वास्तव में बहुत अच्छा पढ़ा। –

+0

लिंक वर्तमान में टूटा हुआ है – thanksd

2

मुझे this आलेख बहुत उपयोगी मिला। Zend_Test दस्तावेज ने बहुत मदद की। इन दो संसाधनों की सहायता से, मैंने ज़ेन फ्रेमवर्क के QuickStart tutorial में यूनिट परीक्षण सफलतापूर्वक कार्यान्वित करने में कामयाब रहे और इसके लिए कुछ परीक्षण लिख दिए।

1

जेडएफ 1.10 का उपयोग करना, मैं कुछ बूटस्ट्रैप कोड में परीक्षण/bootstrap.php (मूल रूप से (सार्वजनिक/index.php) में क्या है, $ आवेदन के> बूटस्ट्रैप() जब तक डाल दिया।

तो मैं कर रहा हूँ सेट पर तो एक परीक्षण

phpunit --bootstrap ../bootstrap.php PersonControllerTest.php 
0

साथ ही यदि आप एक डेटाबेस लेनदेन का उपयोग कर तो यह सबसे अच्छा होगा का उपयोग कर सभी लेन-देन है एक इकाई परीक्षण अन्यथा अपने डेटाबेस सब गड़बड़ हो जाता है के माध्यम से किया जाता है कि नष्ट करने के लिए चलाते हैं।

ऊपर

public function setUp() { 



    YOUR_ZEND_DB_INSTANCE::getInstance()->setUnitTestMode(true); 



    YOUR_ZEND_DB_INSTANCE::getInstance()->query("BEGIN"); 

    YOUR_ZEND_DB_INSTANCE::getInstance()->getCache()->clear(); 

    // Manually Start a Doctrine Transaction so we can roll it back 
    Doctrine_Manager::connection()->beginTransaction(); 
} 

और टियरडाउन पर तुम सब करने की जरूरत है रोलबैक

public function tearDown() { 



    // Rollback Doctrine Transactions 
    while (Doctrine_Manager::connection()->getTransactionLevel() > 0) { 
     Doctrine_Manager::connection()->rollback(); 
    } 

    Doctrine_Manager::connection()->clear(); 



    YOUR_ZEND_DB_INSTANCE::getInstance()->query("ROLLBACK"); 
    while (YOUR_ZEND_DB_INSTANCE::getInstance()->getTransactionDepth() > 0) { 
     YOUR_ZEND_DB_INSTANCE::getInstance()->rollback(); 
    } 
    YOUR_ZEND_DB_INSTANCE::getInstance()->setUnitTestMode(false); 

} 
संबंधित मुद्दे