काम पर, मेरी एक परियोजना ज्यादातर बाहरी ग्राहक से पारित डेटा लेने और डेटाबेस में इसे जारी रखने के बारे में है। यह एक जावा एंटरप्राइज़ ऐप है जो जेपीए का उपयोग करता है और हमारे अधिकांश तर्क सीआरयूडी संचालन के आसपास घूमते हैं।
हमारे कीड़े के अधिकांश हिस्से में एक या दूसरे तरीके से जेपीए शामिल है।
- उदाहरण 1: यदि आप दो बार सेव बटन पर क्लिक करते हैं, तो JPA दूसरी बार डेटाबेस में उसी इकाई को डालने का प्रयास कर सकता है, जिससे प्राथमिक कुंजी का उल्लंघन होता है।
- उदाहरण 2: आप डेटाबेस से एक इकाई प्राप्त करते हैं, इसे संपादित करते हैं और इसके डेटा को अपडेट करने का प्रयास करते हैं। JPA पुराने को अपडेट करने के बजाय एक नया उदाहरण बनाने की कोशिश कर सकता है।
अक्सर समाधान के लिए जेपीए एनोटेशन को जोड़ने / हटाने / बदलने की आवश्यकता होती है। अन्य बार इसे DAO तर्क को संशोधित करने के साथ करना पड़ता है।
मैं यह पता नहीं लगा सकता कि यूनिट टेस्ट और टीडीडी का उपयोग करके हमारे कोड में आत्मविश्वास कैसे लाया जाए। मुझे यकीन नहीं है कि यह इसलिए है क्योंकि यूनिट परीक्षण और टीडीडी एक खराब फिट हैं, या यदि मैं समस्या को गलत कर रहा हूं।
यूनिट परीक्षण एक खराब फिट की तरह लगते हैं क्योंकि मैं केवल रनटाइम पर इन समस्याओं की खोज कर सकता हूं और मुझे मुद्दों को पुन: पेश करने के लिए ऐप सर्वर पर तैनात करने की आवश्यकता है। आमतौर पर डेटाबेस को शामिल करने की आवश्यकता होती है जिसे मैं एक इकाई परीक्षण की परिभाषा से बाहर मानता हूं: ये एकीकरण परीक्षण हैं।
टीडीडी एक खराब फिट की तरह लगता है क्योंकि तैनाती + परीक्षण प्रतिक्रिया पाश इतना धीमा है कि यह मुझे बहुत अनुत्पादक बनाता है। परिनियोजन + परीक्षण फ़ीडबैक लूप में 3 मिनट से अधिक समय लगता है, और ऐसा केवल तब होता है जब मैं विशेष रूप से उस कोड के बारे में परीक्षण चलाता हूं जो मैं लिख रहा हूं। सभी एकीकरण परीक्षण चलाने के लिए 30+ मिनट लगते हैं।
इस साँचे के बाहर कोड है और मैं हमेशा इकाई परीक्षण करता हूं कि जब भी मैं कर सकता हूं। लेकिन हमारे कीड़े और सबसे बड़े समय सिंक के अधिकांश हिस्से में हमेशा जेपीए या डेटाबेस शामिल होता है।
एक और सवाल है जो समान है , लेकिन अगर मैंने सलाह का पालन किया तो मैं अपने कोड (जेपीए) के सबसे अस्थिर हिस्से को लपेटूंगा और सब कुछ परीक्षण करूंगा। मेरे प्रश्न के संदर्भ में, मैं उसी बुरी स्थिति में हूं। जेपीए को लपेटने के बाद अगला कदम क्या है? IMO वह प्रश्न है (शायद) मेरे प्रश्न का उत्तर देने के लिए एक कदम है, लेकिन इसका उत्तर नहीं है।
unit testing != TDD
)