2009-01-04 12 views
17

परीक्षण करने का सबसे अच्छा तरीका क्या है GWT कोड का परीक्षण करने का सबसे अच्छा तरीका क्या है?जीडब्ल्यूटी कोड

होस्ट किए गए मोड में GWTTestCase बहुत धीमा है और मॉकिंग फ्रेमवर्क में से कोई भी काम नहीं करता है।

वर्तमान में हम http://robvanmaris.jteam.nl/2008/03/09/test-driven-development-for-gwt-ui-code/ में सुझाए गए एमवीसी का पालन कर रहे हैं और जीडब्ल्यूटीएमक यूटिलिटीज डिसम() को पुनर्स्थापित कर सकते हैं और विजेट को मॉक करने के लिए पुनर्स्थापित कर सकते हैं। और हमने जीडब्ल्यूटी एमवीसी में व्यू का परीक्षण करने का एक तरीका निकाला है। क्या जीडब्ल्यूटी कोड का परीक्षण करने का कोई बेहतर तरीका है?

उत्तर

14

यदि आप अलगाव में जीडब्ल्यूटी विजेट का परीक्षण करना चाहते हैं, तो कई विकल्प नहीं हैं। आप अपने विगेट्स का दृष्टांत और उसके एपीआई, जो है गूगल GWT खुद को विजेट के लिए क्या करता है के माध्यम से यह परीक्षण करने के लिए एक GWTTestCase उपयोग कर सकते हैं: Source for RadioButtonTest

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

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

मैंने इसी तरह की रणनीति का पालन किया - विजेट्स में न्यूनतम कोड के साथ एमवीपी। कुछ मामलों में मैंने कुछ कोड लिखा था जो ग्रिड क्लास को लपेटेंगे, इसलिए मैं अपने घटक को जीडब्ल्यूटीटेस्टकेस में तुरंत चालू करने में सक्षम था, इसे ग्रिड पास कर सकता था, मेरे घटक पर कुछ तरीकों का आह्वान करता था, और ग्रिड की स्थिति की जांच करता था। मैंने टेस्ट-फर्स्ट जीडब्ल्यूटी के बारे में बेहतर सॉफ्टवेयर के लिए एक लेख लिखा, जिसे आप on my blog पढ़ सकते हैं।

यदि आप गैर-यूआई जीडब्ल्यूटी कक्षाओं (जैसे यूआरएल एन्कोडिंग या डिक्शनरी) का उपयोग करने वाले कोड का परीक्षण करना चाहते हैं, तो आपको GWTTestCase का उपयोग करना होगा, या फिर कोड को तोड़ने के लिए बहुत आसान होने तक समान रैपिंग रणनीतियों का पालन करना होगा । फिर सेलेनियम, या कुछ लक्षित GWTTestCases जैसे टूल के साथ एकीकरण परीक्षण का उपयोग करें, जो केवल परीक्षण करता है कि आप लाइब्रेरी का सही ढंग से उपयोग कर रहे हैं - जैसा कि जेबी रेन्सबर्गर कहते हैं, "ढांचे का परीक्षण न करें!"

4

क्या मेरे लिए काम किया: (दृश्य या नियंत्रक में जैसे कोई व्यापार तर्क; में विधि मॉडल पर कॉल नियंत्रकों केवल देखने की घटनाओं का अनुवाद)

उपयोग शास्त्रीय मॉडल/देखें/नियंत्रक।

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

जीयूआई के माध्यम से सिस्टम का परीक्षण करने के लिए एंड-टू-एंड टेस्ट लिखें ताकि यह सुनिश्चित किया जा सके कि मॉडल और नियंत्रक सही ढंग से विचारों पर लगाए गए हैं। हमने इसे ऐप को तैनात करने और शुरू करने के लिए तेज़ी से पाया और फिर जीडब्ल्यूटीटेस्टकेस का उपयोग करने के बजाय वेबड्राइवर के साथ जुनीट से नियंत्रित ब्राउज़र के माध्यम से इसके साथ बातचीत की!

इस तरह एसिंक्रोनस कॉल का परीक्षण करने के लिए जेएमॉक का उपयोग करें: http://www.jmock.org/gwt.html

+0

बस मेरे 2 सेंट्स में से कुछ मेरे जीडब्ल्यूटी जेनिट परीक्षणों को चलाने के लिए जरूरी एक चेतावनी के बारे में जरूरी है जो ग्रहण में जेएमॉक का उपयोग करता है: मुझे कुछ विशिष्ट जुनीट टेस्ट क्लास के क्लासपाथ में जीडब्ल्यूटी-देव.जर जोड़ने की ज़रूरत है जो जेएमॉक का उपयोग करते हैं; ऐसा करने से पहले, इस तरह के वर्गों में यह त्रुटि थी: java.lang.NoClassDefFoundError: com/google/gwt/core/shared/GWTBridge – cellepo

8

पर पढ़ने के लिए है एक Alernative रूप में, आप कुछ भी आप चाहते हैं (घटक, RPC सेवाओं, आदि उपहास करने के लिए gwt-test-utils है, जो एक स्टैंडअलोन JVM में GWT क्लाइंट कोड को चलाने के लिए प्रबंधन और कुछ सुविधा प्रदान करता है की कोशिश करनी चाहिए ..)

+0

gwt-test-utils का उपयोग करने का प्रयास किया। लेकिन यह देता है: java.lang.RuntimeException: JavaScriptObject subclass और पैचर उदाहरण लोड करते समय त्रुटि .. कोई विचार – MountainRock