2009-07-27 17 views
7

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

समस्या यह है कि प्रत्येक ईजेबी परियोजना में जूनिट परीक्षण होते हैं जो ईजेबी की जांच करते हैं। अभी के लिए ये परीक्षण बहुत उपयोगी नहीं हैं क्योंकि वे एप्लिकेशन सर्वर (jboss) से कनेक्ट करने और EJB इंटरफ़ेस से विधियों को निष्पादित करने का प्रयास करते हैं।

क्या कोई तरीका है कि मैं ईजेबी का निर्माण कर सकता हूं, ईएआर का निर्माण और तैनाती कर सकता हूं और फिर आवेदन सर्वर के खिलाफ सभी ईजेबी से सभी परीक्षण चला सकता हूं?

अभी के लिए मैं ईजेबी-कार्यान्वयन कक्षाओं और मैन्युअल रूप से "इंजेक्शन" इंजेक्शन (कुछEJBImpl.em = EntityManager ....) द्वारा परीक्षणों में एपी अनुकरण कर रहा हूं जो बहुत परेशान है, क्योंकि हमारे पास उनके बीच बड़ी निर्भरता है और मुझे अपने आप लेनदेन को संभालना है।

क्या वास्तविक एपी के खिलाफ ईजेबी परीक्षण चलाने का कोई अन्य तरीका है? प्रत्येक ईजेबी मॉड्यूल के बाद ईएआरबी मॉड्यूल के सबसेट के साथ ईएआर तैनात किया जा सकता है जो पहले से ही बनाए गए थे? पर कैसे ?

ईएआर परीक्षणों के हिस्से के रूप में सभी ईजेबी मॉड्यूल के मेवेन परीक्षण चलाने के लिए सेट किया जा सकता है? यह कैसे करना है ?

उत्तर

7

यह एक साधारण समस्या नहीं है, और कोई आसान जवाब नहीं है। उम्मीद है कि ये पॉइंटर्स मदद करेंगे।

मुझे लगता है कि आपकी सबसे अच्छी रणनीति वास्तविक परीक्षण परीक्षणों में अपने परीक्षणों को अलग करना है - जो कंटेनर के बिना अलगाव में चल सकते हैं, और उन परीक्षणों को स्थानांतरित कर सकते हैं जिन्हें कंटेनर को एकीकरण परीक्षण में आवश्यक है।

आप उन परीक्षणों को अधिकतम करने के लिए Ejb3unit का उपयोग कर सकते हैं जिन्हें कंटेनर चलाने की आवश्यकता नहीं है। यह जटिल जटिलताओं में से कुछ को नकल करने में मदद करता है। Ejb3unit में एक मेवेन प्लगइन है, documentation को उनके मैवेन रिपोजिटरी से जुड़ने वाले विवरणों के लिए देखें।

जेमॉक जैसे अन्य मॉकिंग फ्रेमवर्क भी मदद कर सकते हैं। यदि आप ClassImposteriser का उपयोग करते हैं तो आप कक्षाओं के साथ-साथ इंटरफेस का नकल कर सकते हैं।

उन परीक्षणों के लिए जिन्हें ईजेबी कंटेनर की आवश्यकता है, आप इन्हें integration tests के रूप में चलाने के लिए कॉन्फ़िगर कर सकते हैं, यह आपके ईजेबी परियोजनाओं के बीच संबंधों के आधार पर उन्हें एक अलग परियोजना में स्थानांतरित करने के लिए समझ सकता है।

embedded Jetty instance in your JUnit tests लॉन्च करना संभव है और प्रोग्रामेटिक रूप से इसमें servlets जोड़ें। बेशक जेटी ईजेबी कंटेनर नहीं है, आपको OpenEJB जैसे ईजेबी कंटेनर की आवश्यकता होगी।

जेट्टी में OpenEJB कॉन्फ़िगर करने के लिए इस तरह के एक विन्यास का उपयोग करें:

<plugin> 
    <groupId>org.mortbay.jetty</groupId> 
    <artifactId>maven-jetty-plugin</artifactId> 
    <configuration> 
    <scanIntervalSeconds>5</scanIntervalSeconds> 
    <contextPath>/example</contextPath> 
    <systemProperties> 
     <systemProperty> 
     <name>java.naming.factory.initial</name> 
     <value>org.apache.openejb.client.LocalInitialContextFactory</value> 
     </systemProperty> 
     <systemProperty> 
     <name>java.naming.factory.url.pkgs</name> 
     <value>org.mortbay.naming</value> 
     </systemProperty> 
    </systemProperties> 
    </configuration> 
</plugin> 

OpenEJB के लिए निर्भरता घोषणाओं होगा:

<dependency> 
    <groupId>org.apache.openejb</groupId> 
    <artifactId>openejb-core</artifactId> 
    <version>3.1</version> 
    <scope>test</scope> 
</dependency> 

तुम भी Selenium का उपयोग कार्यात्मक परीक्षण के साथ मदद करने के लिए कर सकते हैं (यह मानते हुए कि आप इसे दूर कर चुके हैं), ऐसा करने के लिए यहां एक guide using Selenium, Jetty and OpenEJB है।

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