2013-06-03 4 views
8

के साथ चल रहा है हमारे पास लगभग 180 यूनिट परीक्षण webtestcase कक्षा लागू करते हैं और परीक्षण नियंत्रकों पर चल रहे हैं।पीपीओ कनेक्शन बंद नहीं होता है जब phpunit symfony 2.X

हालांकि जब हम यूनिट परीक्षण चलाते हैं, तो वे डीबी से बहुत अधिक कनेक्शन खोलते हैं। 120 वें परीक्षण के बाद बहुत से सक्रिय टीसीपी कनेक्शन परीक्षण विफल हो गए हैं। परीक्षण चल रहे हैं, जबकि सभी कनेक्शन सक्रिय हैं।

आंसू समारोह में हम इकाई प्रबंधक के करीबी कार्य को कॉल करते हैं, लेकिन कुछ भी नहीं है, इससे कोई प्रभाव नहीं पड़ता है। कनेक्शन ऑब्जेक्ट संदर्भ रखने के लिए कुछ वर्ग है, मुझे लगता है।

क्योंकि पीडीओ कनेक्शन के बारे में उल्लिखित PHP मैनुअल में जब ऑब्जेक्ट को शून्य पर असाइन किया गया था। हम यह भी करते हैं लेकिन कोई बदलाव नहीं करते हैं। पीएस: हमारे यूनिट परीक्षण कार्यात्मक परीक्षण हैं। नियंत्रक पर काम करता है और डीबी के साथ एकीकृत, कोई नकली वस्तु नहीं है

हमारी गलती कहां है? हम समस्या को कैसे ठीक कर सकते हैं?

config_test.yml

imports: 
    - { resource: config_dev.yml } 

framework: 
    test: ~ 
    session: 
     storage_id: session.storage.mock_file 

web_profiler: 
    toolbar: false 
    intercept_redirects: false 

doctrine: 
    dbal: 
     driver: pdo_mysql 
     port: 3306 
     host: localhost 
     dbname: mydb 
     user: myuser 
     password: mypass 
     charset: UTF8 
+0

क्या हम देख सकते हैं कि आप config.yml फ़ाइल और/या पैरामीटर.आईएमएल के अंदर अपना कनेक्शन कैसे परिभाषित करते हैं? – j0k

+0

@ j0k मैंने प्रश्न में जोड़ा – GirginSoft

+0

मुझे कुछ समय पहले इसी तरह की समस्या थी। अधूरा लेनदेन की वजह से समस्या हुई। क्या आप स्पष्ट लेनदेन का उपयोग करते हैं (मेरा मतलब है स्टार्ट-प्रतिबद्ध/रोलबैक)? यदि ऐसा है, तो सुनिश्चित करें कि आप इसे हमेशा खत्म करते हैं। – Cyprian

उत्तर

6

में यह मेरा कनेक्शन मापदंडों आप अपने phpunit.xml.dist फ़ाइल की जाँच की थी?

मुझे लगता है कि आपको इसे देखना चाहिए; http://www.slideshare.net/fabpot/unit-and-functional-testing-with-symfony2

सुनिश्चित करें कि आपके पैरामीटर के नीचे

<phpunit 
    backupGlobals    = "false" 
    backupStaticAttributes  = "false" 
    colors      = "true" 
    convertErrorsToExceptions = "true" 
    convertNoticesToExceptions = "true" 
    convertWarningsToExceptions = "true" 
    processIsolation   = "true" 
    stopOnFailure    = "false" 
    syntaxCheck     = "false" 
    bootstrap     = "bootstrap.php.cache" > 
+0

बहुत बहुत धन्यवाद। मुझे समाधान मिला। स्पष्ट रूप से प्रक्रिया इलोलेशन पैरामीटर समस्या का कारण बनता है। यह एक झूठा था, क्योंकि इस पूरे परीक्षण एक प्रक्रिया पर काम करते हैं और मुझे लगता है कि यह parameterers रखा। लेकिन जब मैंने इसे सही में बदल दिया, तो प्रत्येक परीक्षण समाप्त होने के बाद कनेक्शन बंद हो गए। @bulutcagatay – GirginSoft

+1

दिलचस्प है कि इससे एक और समस्या आती है: "अनकही पीडीओएक्सप्शन: आप पीडीओ उदाहरणों को क्रमबद्ध या अनुक्रमित नहीं कर सकते हैं"। –

3

सक्षम करने की प्रक्रिया अलगाव ही टेस्ट स्वीट मूर्खता से और अधिक निष्पादित करने के लिए धीमी गति से बनाने का पक्ष प्रभाव पड़ेगा रहे हों।

एक बेहतर दृष्टिकोण, बस सिद्धांत बताने के लिए स्पष्ट रूप से इसके संबंध को बंद करने के लिए है या तो परीक्षण टियरडाउन, tearDownAfterClass या किसी विधि जैसे उसकी व्याख्या, जैसे उदाहरण के लिए पर:

trait CloseConnectionAfterTestTrait { 
    /** @after */ 
    public function avoidExhaustingDbConnections() 
    { 
     if(!empty($this->em)){ 
      $this->em->getConnection()->close(); 
     } 
    } 
} 

इस उदाहरण में, यह पर निर्भर है उपभोक्ता जो भी इकाई प्रबंधक उदाहरण को बचाने के लिए $this->em है। लेकिन यदि आप सिद्धांत का उपयोग करते हैं तो आप static::$kernel->something के माध्यम से सिद्धांत सेवा तक पहुंचकर कोड को सामान्य रूप से सामान्यीकृत कर सकते हैं।

+0

मैंने प्रत्येक परीक्षण के बाद कनेक्शन बंद करने के लिए कोड जोड़ा है - लेकिन अभी भी कोई प्रभाव नहीं है ... – naneri

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