2010-12-17 13 views
7

मैं PHP से कैसे अपना डेटाबेस बना सकता हूं, शायद डिफ़ॉल्ट डेटा डाल सकता हूं। वर्तमान में, मैं यूनिट टेस्ट के लिए व्यवहार का उपयोग करने का इरादा रख रहा हूं।मैं PHP में अपने डेटाबेस को फिर से कैसे बना सकता हूं (उदाहरण के लिए यूनिट परीक्षण के लिए)

मैं सिद्धांत 2, Zend फ्रेमवर्क 1.11, Zend_Test उपयोग कर रहा हूँ इकाई परीक्षण

मैं CLI

doctrine orm:schema-tool:update --force 

या

doctrine orm:schema-tool:drop --force 
doctrine orm:schema-tool:create 

मैं एक PHP प्रतिस्थापन रहा हूँ के लिए इस्तेमाल कर सकते हैं, अब तक this

लेकिन यह कुछ दिखाई देगा जैसे

$tool = new \Doctrine\ORM\Tools\SchemaTool($em); 
$classes = array(
    $em->getClassMetadata('Entities\User'), 
    $em->getClassMetadata('Entities\Profile') 
); 
$tool->dropSchema($classes, \Doctrine\ORM\Tools\SchemaTool::DROP_DATABASE); 
$tool->createSchema($classes); 

ething और मैं नहीं वास्तव में चाहते हैं जब वे बदल सकते हैं विकास में, मॉडल वर्गों निर्दिष्ट करने के लिए खास तौर पर हो रही है। इसे केवल नीचे निर्दिष्ट सभी वर्गों से पढ़ा जाना चाहिए ... नीचे ... सीएलआई की तरह ही, आपको अपनी इच्छित कक्षाओं को निर्दिष्ट करने की आवश्यकता नहीं है?

$driverImpl = $config->newDefaultAnnotationDriver(array(realpath('../models'))); 
$config->setMetadataDriverImpl($driverImpl); 
+1

* (संदर्भ) * [डेटाबेस परीक्षण पर PHPUnit में अध्याय] (http://www.phpunit.de/manual/3.4/en/database.html) – Gordon

+0

@ गॉर्डन, धन्यवाद, मुझे लगता है कि यूनिट का सही तरीका होगा मेरे मॉडल का परीक्षण करें, पीडीओ कनेक्शन की बजाय केवल एक चीज है, मैं सिद्धांत के कनेक्शन का उपयोग कैसे कर सकता हूं? मैं [सिद्धांत 2] का उपयोग कर रहा हूं (http: //www.doctrine-project।संगठन /) –

+0

मैं अनिवार्य रूप से आपके जैसा ही सेटअप कर रहा हूं, सिवाय इसके कि मैं कक्षाओं के नामों की सूची को कॉन्फ़िगर से बाहर खींचता हूं, जो बनाए रखना आसान है। हालांकि, मुझे पता चला है कि हर टेस्ट में 'ड्रॉपस्केमा() 'और' createSchema()' को कॉल करना * वास्तव में महंगा है, और परीक्षणों का एक बड़ा सूट हमेशा चलाने के लिए होता है। PHPUnit जुड़नार का उपयोग करना बहुत तेज़ है। मुझे बेंजामिन के विस्तार को भी देखना होगा। –

उत्तर

5

आप

सिद्धांत के लिए PHPUnit एक्सटेंशन PHPUnits डाटाबेस विस्तार में कई हुक प्रदान करता है और एक डाटाबेस के खिलाफ अपने सिद्धांत 2 कोड का परीक्षण करने के लिए एक बहुत ही सुविधाजनक तरीका प्रदान करता उपयोग कर सकते हैं।

रीडमे में कुछ उदाहरण हैं, जिसमें एक उदाहरण भी शामिल है जो फ्लाई पर डेटाबेस स्कीमा बनाने का तरीका दिखाता है। बेंजामिन एबरलेई एक सिद्धांत 2 कोर योगदानकर्ता है।

इसके अलावा डीबी परीक्षण करने के लिए बी Eberlei के अंतिम गाइड देखें PHPUnit साथ

0

सिद्धांत fixtures का समर्थन करता है। कोशिश करके देखो।

+0

मैं सिद्धांत 2 का उपयोग कर रहा हूं। शायद मुझे इसे स्पष्ट बनाना चाहिए –

+0

यहां सिम्फनी के लिए एक ट्यूटोरियल है: http://www.symfony-project.org/blog/2009/10/05/symfony-and-doctrine-2 आप अपने मॉडल को मैन्युअल रूप से बनाना और उन्हें जारी रखना है। – erenon

1

क्योंकि आप मॉडल के लिए पथ निर्धारित किया है जब EntityManager की स्थापना आप कोड में स्कीमा बना सकते हैं इस पथ को फिर से चलाने के बिना (और प्रत्येक वर्ग घोषित किए बिना)। ऐसा करने के लिए आपको EntityManager के अपने कॉन्फ़िगर किए गए इंस्टेंस का संदर्भ प्राप्त करने और क्लासमैटाडाटा फैक्टरी का संदर्भ प्राप्त करने की आवश्यकता है जिसे आप क्लासमैटाडाटा फैक्टरी # getAllMedata() से कॉल कर सकते हैं।

एक उदाहरण है जहाँ मैं एक स्थिर बूटस्ट्रैप वर्ग है कि मुझे कहीं से भी EntityManager के लिए एक संदर्भ पाने के लिए अनुमति देता है और मैं इकाई परीक्षण में सेटअप() कॉल पर स्कीमा को पुन:

class ModelTestCase extends PHPUnit_Framework_TestCase { 

    public function setUp() { 
     $em = Bootstrap::getEntityManager(); 
     $tool = new \Doctrine\ORM\Tools\SchemaTool($em); 

     $mdFactory = $em->getMetadataFactory(); 
     $tool->createSchema($mdFactory->getAllMetadata()); 
     parent::setUp(); 
    } 
} 
संबंधित मुद्दे

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