2011-05-25 13 views
6

मैं टीडीडी दायरे में प्रवेश करने की कोशिश कर रहा हूं, और मेरे पास कुछ उपयोगकर्ता मॉडल का परीक्षण करने में कठिनाई इकाई है। मैं अपने मॉडल के सत्यापन का परीक्षण करने के कोशिश कर रहा हूँ, और व्यापार की आवश्यकताओं इस प्रकार हैं:यूनिट परीक्षण दाबाबेस अनुप्रयोग

  1. > = 6 चरित्र उपयोगकर्ता नाम आवश्यक
  2. > = 5 चरित्र पासवर्ड, कम से कम 1 पत्र और नंबर
  3. साथ
  4. मान्य ईमेल प्रारूप आवश्यक
  5. ... ऐसा ऐसा
  6. उपयोगकर्ता नाम और ईमेल पहले से ही डीबी

सभी आवश्यकताएँ हैं में मौजूद नहीं कर सकते आसानी से टेस्ट करने योग्य, 5 को छोड़कर, जिसके लिए डेटाबेस को ज्ञात स्थिति में होना आवश्यक है। मुझे पता है कि PHPUnit के साथ मैं एक्सएमएल फाइलों का उपयोग कर एक ज्ञात राज्य में अपना डेटाबेस स्थापित कर सकता हूं, लेकिन क्या कोई बेहतर तरीका है?

जो मैं चाहता हूं वह मेरे डेटाबेस के लिए राज्य में वापस लौटने के लिए है, यह परीक्षण चलाने से पहले था (यानी, विकास के दौरान)। मुझे लगता है कि मैं परिवर्तनों को रोलबैक करने के लिए MySQL लेन-देन का उपयोग कर सकता हूं, या मुझे लगता है कि मैं दो अलग-अलग डेटाबेस का उपयोग कर सकता हूं, एक विकास के लिए और एक परीक्षण के लिए।

मैंने यूनिट परीक्षणों में वास्तविक डीबी कनेक्शन का उपयोग न करने के लिए कहीं भी पढ़ा है, और इसके बजाय नकली डेटा का उपयोग करें। बिल्कुल यकीन नहीं है कि यह कैसे काम करता है।

क्या कोई मुझे मेरे पास अलग-अलग विकल्पों की व्याख्या कर सकता है, और कौन से सबसे अच्छे मार्ग हैं?

धन्यवाद

संपादित करें:

मुझे लगता है मैं रूबी ऑन रेल्स दृष्टिकोण के साथ जाने के लिए जा रहा हूँ और सिर्फ 3 अलग डेटाबेस, उत्पादन, विकास, और परीक्षण की स्थापना की। जब तक किसी के पास कोई आपत्ति नहीं होती है।

+0

शायद कुछ हद तक संबंधित: http://stackoverflow.com/questions/5281418/using-mock-objects-in-php-inside-functions-that-instantiate-their-own-objects – edorian

उत्तर

3

कुछ लोग कहते हैं कि डेटाबेस पर परीक्षण नहीं करते हैं, मेरे जैसे अन्य लोग कहते हैं कि आपका डीएओ कोड अच्छा है या नहीं, यह एकमात्र तरीका है।

आपको दो डेटाबेस की आवश्यकता है। परीक्षण के लिए एक और विकास के लिए एक। सबसे अच्छा अभ्यास आपके यूनिट परीक्षणों के लिए एक सामान्य सुपरक्लास होना है जो डेटाबेस सेट करता है (शायद एक नई स्कीमा में प्रवेश करता है) और उसके बाद आपके सभी डीबी यूनिट परीक्षण उस डेटाबेस में चलते हैं। आप इसे बाद में साफ कर सकते हैं।

आपके द्वारा उल्लिखित परीक्षण के लिए (उपयोगकर्ता नाम और ईमेल डीबी में पहले से मौजूद नहीं हो सकता है) तो इस तरह कुछ करें (psuedocode)।

Create user with username that you know doesn't exist (say username-largerandomuuid) 
Insert user. 
Assert user was created 

Insert same user(name) 
Assert error is thrown. 
+0

तो आप कह रहे हैं अलग डेटाबेस, एक परीक्षण के लिए और एक विकास के लिए। या आप दोनों के लिए एक ही डेटाबेस का उपयोग करने के लिए कह रहे हैं? क्योंकि आपने परीक्षण के लिए एक और तैनाती के लिए एक अलग होने का उल्लेख किया है, लेकिन सक्रिय विकास के लिए एक का उल्लेख नहीं किया है। धन्यवाद। – BDuelz

+0

अच्छी तरह से आपके पास स्थानीय रूप से दो डेटाबेस होंगे - एक निजी विकास के लिए और एक निजी परीक्षण के लिए। परीक्षण एक फेंक दिया जाता है और प्रत्येक टेस्ट रन पर पुनर्निर्मित किया जाता है। विकास एक जीवित व्यक्ति से एक क्लोन है जिसे हर कुछ दिनों या हफ्तों में ताज़ा किया जा सकता है। – monkjack

+0

परफेक्ट। धन्यवाद। – BDuelz

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