2010-02-25 17 views
16

मैं आवेदन के लिए डेटाबेस माइग्रेशन लिखने के लिए Migrator.NET का उपयोग कर रहा हूं। मार्क-आंद्रे Cournoyer लिखा है:मैं डेटाबेस माइग्रेशन का परीक्षण कैसे करूं?

अपने आवेदन में किसी भी कोड आप आपके माइग्रेशन का परीक्षण करना चाहिए की तरह। ऊपर और नीचे कोड। अपने निरंतर निर्माण प्रक्रिया का हिस्सा लें और इसे पर कई अलग-अलग डेटाबेस और पर्यावरण पर परीक्षण करें।

मैं यह कैसे कर सकता हूं? मान लें कि मेरे पास अप() विधि है जो एक टेबल और डाउन() विधि बनाता है जो एक ही तालिका को छोड़ देता है और मैं SQL सर्वर का उपयोग कर रहा हूं। एक परीक्षण कैसा दिखता है? क्या मुझे सिस्टम टेबल के खिलाफ एसक्यूएल क्वेरी चलाना चाहिए, जैसे select * from sys.columns, यह जांचने के लिए कि क्या टेबल बनाया गया था और इसकी उचित संरचना है? क्या होगा यदि हम NHibernate का उपयोग कर रहे हैं?

संपादित मैं रेल ActiveRecord माइग्रेशन भावना (बनाना, संशोधित करना और सी # कोड के आधार पर छोटे चरणों में डेटाबेस नीचे फाड़) में प्रवास करते हैं मतलब है।

संपादित 2 और here की जहाँ मैं के बारे में पढ़ा है कि हम माइग्रेशन का परीक्षण करना चाहिए। ब्लॉग पोस्ट वास्तव में माइग्रेटर की विकी से जुड़ा हुआ है।

+0

मैं एक ही सवाल था और अभी तक एक जवाब नहीं मिला है। +1 – Paul

उत्तर

5

आप अपनी दाल का परीक्षण करते हैं?

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

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

आप यकीन है कि यह वास्तव में काम करउपयोग नई वस्तुओं के लिए प्रयास करने है होना करने के लिए प्रणाली कैटलॉग और INFORMATION_SCHEMA विचारों और इतने पर को देखकर परिणामों की पुष्टि करने की कोशिश कर सकते हैं, लेकिन अंत में एक ही तरीका है। सिर्फ इसलिए कि ऑब्जेक्ट्स का मतलब यह नहीं है कि वे कार्यात्मक हैं।

+0

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

0

शायद इस कंपनी के शेयर में आपकी मदद कर सकते हैं:

http://www.benzzon.se/forum/uploads/benzzon/2006-03-27_134824_sp_CompareDB.txt

इस स्क्रिप्ट की तुलना दो डीबी (संरचना और डेटा)

+0

नहीं, यह माइग्रेशन की तरह नहीं है जिसके बारे में मैं बात कर रहा हूं। :) मैं एक सर्वर से दूसरे सर्वर पर डेटाबेस माइग्रेट नहीं कर रहा हूं। मैं रेल माइग्रेशन भावना में माइग्रेशन की बात कर रहा हूं। मैंने माइग्रेटर.NET प्रोजेक्ट में एक हाइपरलिंक जोड़ा है, उम्मीद है कि यह दूसरों के लिए थोड़ा सा स्पष्ट करता है। –

1

स्रोत नियंत्रण अपने वर्तमान कोड बेस का एक स्नैपशॉट लेने के लिए है।। माइग्रेशन आपके डेटाबेस को एक संस्करण से दूसरे संस्करण में बदलने के लिए है। ताकि भविष्य में आप पुराने डेटाबेस ले सकें, माइग्रेशन लागू कर सकें और नवीनतम कोड बेस के साथ काम कर सकें।

मैंने कभी भी वास्तविक माइग्रेशन परीक्षण नहीं देखा है। मैंने परिणामों का परीक्षण किया है, और उन्होंने नवीनतम माइग्रेशन चलाने के लिए मुझे पकड़ा/याद दिलाया है।

describe User do 
    it { should have_column :name, :type => :string } 
    it { should validate_presence_of :name}  
end 

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

+0

यह केवल साधारण 1: 1 मॉडल के लिए काम करेगा, हमारे डेटाबेस में डोमेन मॉडल कक्षाओं की तुलना में एक अलग संरचना है। मुझे लगता है कि आपका उदाहरण रुबी में है (क्या वह rspec है?) और यह ActiveRecord के साथ काम करेगा, लेकिन हम इसका उपयोग नहीं कर रहे हैं। हम अपने डोमेन मॉडल इकाइयों में डेटाबेस टेबल मैप करने के लिए NHibernate का उपयोग कर रहे हैं और वे 1: 1 से मेल नहीं खाते हैं। –

+0

हां, यह rspec है। यदि ऐसा है, तो शायद मैं राहेइज़र सुझाव देता हूं कि केवल मॉडल का प्रयोग करें। .NET के साथ करना मुश्किल है, लेकिन यदि आप पहले से ही एक dev और test डेटाबेस सेट अप कर चुके हैं तो यह करना आसान होगा। यदि आपके मैपिंग 1: 1 नहीं हैं, तो परीक्षण के लिए परीक्षण चलाने के लिए एक साफ परीक्षण डेटाबेस स्थापित करने में समय बिताना उपयोगी हो सकता है। मैंने अभी भी माइग्रेशन का परीक्षण करने वाले किसी के बारे में कभी नहीं सुना है, लेकिन केवल उन माइग्रेशन के परिणामों का परीक्षण किया है। –

+0

मैं आपको +1 दूंगा, क्योंकि आपका उत्तर ActiveRecord के लिए अच्छा है। –

0

आप डेटाबेस सिस्टम ऑब्जेक्ट्स की तुलना कर सकते हैं, लेकिन आपको तुलना करने के लिए एक लक्ष्य रखना होगा - अन्यथा आप कैसे पास होंगे या विफल हो जाएंगे?

मुझे लगता है कि आप किनारे के मामले सीआरयूडी ऑपरेशन टेस्ट मामलों का एक सेट बनाने से बेहतर हो सकते हैं जो डेटा परत में इकाइयों या संचालन का प्रयोग करते हैं। यदि इनमें से कोई भी असफल रहता है, तो डेटाबेस आवश्यकतानुसार समन्वयित नहीं है। यानी यदि फ़ील्ड char (20) डालने में विफल रहता है क्योंकि यह डेटाबेस में केवल char (15) है। फिर डीबी संरचना तुलना को देखने के लिए किया जा सकता है कि क्या बंद है।

आप हाल ही में बदली गई वस्तुओं पर ध्यान केंद्रित करके इसे शॉर्ट सर्किट करने में सक्षम हो सकते हैं, और मानते हैं कि पूर्व परिवर्तन लागू किए गए हैं।

1

NHibernate का उपयोग करते हुए आपकी समग्र दृढ़ता परीक्षण रणनीति के हिस्से के रूप में माइग्रेशन परीक्षण का इलाज करें, यानी।यदि आप बना सकते हैं और किसी भी त्रुटि के बिना अपने संस्थाओं के सभी को बचा सकता है, अपने डेटाबेस और अपने मैपिंग सही होना चाहिए। एकीकरण परीक्षण के कुछ प्रकार -

0

मैं इस का जवाब की तलाश में हूँ और साथ ही। मुझे लगता है कि इसे एक इकाई परीक्षण के बजाए एकीकरण वातावरण में परीक्षण किया जाना चाहिए: यूनिट परीक्षण (डीएएल) के लिए मैं डेटाबेस छोड़ देता हूं और इसे फिर से बना देता हूं।

हालांकि, आदर्श रूप में मैं एकीकरण वातावरण चाहता हूं, मेरा डीबी उत्पादन से दोहराया गया है और डीबी माइग्रेशन स्क्रिप्ट दोनों तरीकों से चलती हैं: रोलबैक सुनिश्चित करने के लिए उत्पादन के एक आसान अपग्रेड और डाउनवर्ड को सुनिश्चित करने के लिए ऊपर।

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