2011-05-19 11 views
6

मैं इस बारे में उत्सुक हूं कि दूसरे इस पर कैसे पहुंचते हैं। एक परीक्षण लिखना इतना बुरा नहीं है, लेकिन मजाकिया प्रकार थोड़ा बेकार है और मेरे प्रवाह में कटौती करता है। क्या किसी के लिए 'फिक्स्चर' निर्देशिका होना ठीक है और उदाहरण के लिए mock_db.php कहें उदाहरण के लिए उस विशेष नकली घोषणा के साथ?phpunit - एकाधिक परीक्षण सूट के लिए मॉक ऑब्जेक्ट्स का पुन: उपयोग करना

एक कदम आगे जाकर, क्या यह मोड़ एक समारोह में सारणित होने का बुरा अभ्यास होगा?

Ie:

// function to include a db mock 
    include_once 'test/fixtures/dbmock.php'; 

    $mockMYSQL = $dbmock('mysql', 'db1'); 
    $mockMSSQL = $dbmock('mssql', 'db2'); 

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

+0

नहीं डेटा प्रदाताओं आप मदद करते हैं? – zerkms

+0

क्या आप '$ this-> getMock ('') का उपयोग करके बनाए गए PHPUnit mock ऑब्जेक्ट्स के बारे में बात कर रहे हैं या ये कस्टम-लिखित मैक्स हैं? परीक्षण समर्थन वस्तुओं को बनाने के लिए फिक्स्चर का उपयोग पूरी तरह से मान्य और अनुशंसित है। –

+0

@ डेविड मैं विभिन्न टेस्ट सूट के लिए मैक्स पुन: प्रयोज्य करना चाहता हूं। इस मजाकिया व्यवसाय के साथ अभी भी बहुत हरा, और इसे लागू करने के तरीके पर अनजान है। – stefgosselin

उत्तर

3

मैं या तो विरासत के साथ जाऊंगा - सामान्य मॉक ऑब्जेक्ट्स को बनाए रखने और सामान्य पेरेंट टेस्ट केस क्लास में संरक्षित * विधियों में लौटा दिया गया है।

या आप क्लीनर और स्टैंडअलोन क्लास बना सकते हैं जिसे आप अपने परीक्षण सूट में तत्काल स्थापित करेंगे और इसे अपने नकली वस्तुओं को बनाने दें। मैं इस तरह से पसंद करूंगा, लेकिन इसमें एक नकारात्मक पक्ष है - शायद आप PHPUnit_Framework_TestCase getMock() विधि का उपयोग नहीं कर सकते हैं या नहीं। मैं आपको इस विधि को देखने की सलाह देता हूं और अपने स्टैंडअलोन क्लास में इसका तर्क उपयोग करने का प्रयास करता हूं।

वैश्विक कार्यों सहित, बहुत OOP नहीं है, यह जादू पीएचपी की अनुमति देता है कि बजाय है, लेकिन आप यह करने से बचना चाहिए :)

+0

अरे, सुझावों के लिए धन्यवाद, छोटे वर्गों के लिए टेस्टकेस में उप-वर्गीकरण वह टुकड़ा है जो मैं खो रहा था। मैंने पहले ही यर सुझाव के अनुसार कुछ स्टैंडअलोन बनाए हैं, लेकिन मुझे अभी भी getMock() निर्माता का पुन: उपयोग करने का एक तरीका देखना है। – stefgosselin

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