2010-10-26 13 views
5

को यह शायद कई बार कहा गया है, लेकिन यहाँ यह जाता है:कैसे इकाई परीक्षण डाटाबेस कक्षा

मैं एक वर्ग db कनेक्शन

खुले कनेक्शन
क्वेरी db
पढ़ने मूल्यों
पास से भरा है कनेक्शन

मुझे इस सामान का परीक्षण कैसे करना चाहिए?

क्या मुझे नकली डेटाबेस बनाने की आवश्यकता है? मुझे लगता है कि मैं MySQL वर्गों (सी # के लिए) का नकल कर सकता हूं, लेकिन यह भी बहुत काम है।

कुछ कथन "इंसर्ट इंटो" हैं, मुझे इसके बारे में क्या करना चाहिए?

+3

यदि आपको लगता है कि बोफोरे से कोई प्रश्न पूछा जा सकता है, तो आपको [इसके लिए खोज] चाहिए [http://stackoverflow.com/search?q=unit+test+database+class)। – meagar

उत्तर

7

सामग्री जो परीक्षण करने में कठोर होती है अक्सर tightly coupled होती है या Single Responsibility principle का पालन नहीं करती है।

सबसे पहले। अपने datalayer विभाजित करें। repository pattern पर देखें। प्रत्येक इकाई (तालिका या दृश्य) में इसका स्वयं का वर्ग डेटा लेना चाहिए।

विशिष्ट ड्राइवर कार्यान्वयन के बजाय डेटा इंटरफेस का उपयोग करें: SqlConnection के बजाय। उचित कनेक्शन कार्यान्वयन प्राप्त करने के लिए DbProviderFactory का उपयोग करें। फिर कमांड आदि प्राप्त करने के लिए connection.CreateCommand() का उपयोग करें

ऐसा करने से यह आपकी डेटा परत का परीक्षण करने के लिए बहुत आसान हो जाएगा। और याद रखें, डेटालिस्टर के पास कोई तर्क नहीं होना चाहिए। डेटा स्रोत से डेटा लोड करना ही एकमात्र उद्देश्य है।

लेकिन यदि आप सामान बदलना नहीं चाहते हैं: डेटाबेस के विरुद्ध काम करना सबसे आसान तरीका है। प्रत्येक डेटा को हटाएं और प्रत्येक परीक्षण से पहले नया परीक्षण डेटा डालें (पिछले परीक्षण के दौरान किसी भी बदलाव को हटाने के लिए)।

+0

ठीक है लेकिन देखें कि क्या उन यूनिट परीक्षण समानांतर में चलाए जाते हैं - जिस बिंदु पर दूसरा परीक्षण पहले परीक्षण द्वारा आवश्यक डेटा मिटा देगा। यह तब हो सकता है जब परीक्षण ढांचा बदल दिया गया हो, या जब कोई नया संस्करण परीक्षण-निष्पादन अनुक्रमण को बदलता है। मैंने हाल ही में इस सटीक समस्या को डीबग किया है। –

2

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

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

0

आप अपने मशीन पर स्थानीय रूप से चल रहे एक लाइव MySQL डेटाबेस का उपयोग कर सकते हैं।

मैं इस उद्देश्य के लिए एक Nuget पैकेज बना दिया है, कि आप अपने प्रोजेक्ट के लिए जोड़ सकते हैं: https://github.com/stumpdk/MySql.Server

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

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