2010-09-17 1 views
8

मेरे पास कई परीक्षण हैं जो एक MySQL डेटाबेस के विरुद्ध चलते हैं जो स्कीमा के साथ प्री-लोड किया गया है और SQL फ़ाइलों के सेट से उदाहरण डेटा है। इनमें से कुछ परीक्षण, उनके रन के दौरान, डेटाबेस में भी नया डेटा बनाते हैं।प्रारंभिक SQL फ़िक्स्चर के सापेक्ष किसी तालिका में परिवर्तन कैसे ढूंढें?

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

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

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

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

+0

अतीत में उपयोग की जाने वाली एक विधि संख्यात्मक आधारित प्राथमिक कुंजी के लिए नकारात्मक मान असाइन करना था। परीक्षण डेटा से छुटकारा पाने में बहुत आसान: 'तालिका से हटाएं जहां आईडी <0' –

+0

@OMG टट्टू: यह एक चालाक विचार है; मुझे यकीन नहीं है कि क्या हमारा कोडबेस इसका समर्थन करेगा (कुछ 'x> 0' et cetera आस-पास बैठे हो सकते हैं), लेकिन मैं निश्चित रूप से इसे ध्यान में रखूंगा। – Amber

उत्तर

2

कुछ विभिन्न सुझाव है कि मैं अन्य चैनलों के माध्यम अब तक मिल गया है:

  • CHECKSUM TABLE - यह, मेरी जरूरतों के लिए लगभग पूर्ण होगा सिवाय इसके कि यह केवल MyISAM तालिकाओं (हम InnoDB का उपयोग करें) के लिए काम करता है।

  • SHOW TABLE STATUS - यह Data_length प्रदान करता है, जो एक सरल तुलना के रूप में काम कर सकता है। अगर मुझे कुछ भी बेहतर नहीं मिल रहा है, तो यह पर्याप्त हो सकता है।

+0

मुझे लगता है कि मैं 'Data_length' के साथ जा रहा हूं, क्योंकि यह गति और व्यापकता के बीच एक सभ्य व्यापार प्रदान करता है। उन लोगों के लिए धन्यवाद जिन्होंने हालांकि अन्य विकल्पों की पेशकश की। – Amber

1

से पहले परीक्षण आप तालिकाओं के सभी नकल कर सकता है (यानी CREATE TABLE tmpTableA चुनें * TableA से) और फिर परीक्षण के बाद उनके खिलाफ में शामिल होने के क्या नई पंक्तियाँ वहाँ बयान

SELECT a.* 
FROM tableA a 
LEFT JOIN tmpTableA as tmp on tmp.id=a.id 
WHERE tmp.id IS NULL 
उपयोग कर रहे हैं

आप परीक्षण से पहले तालिका के डंप भी कर सकते हैं, फिर परीक्षण के बाद, और फिर दो डंप पर एक अंतर कर सकते हैं।

+0

दुर्भाग्यवश जॉइन दृष्टिकोण मुझे नहीं बताता है कि एक पंक्ति संशोधित की गई थी, केवल तभी जब नई पंक्तियां शामिल की गई थीं। Diff दृष्टिकोण कुछ हद तक एक स्लेजहैमर है, लेकिन यह एक सभ्य सुझाव है। :) – Amber

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