2015-09-08 6 views
5

मैं एक एम्बेडेड वाइल्डफ्लि उदाहरण पर अपने युद्ध के मैक्रो (माइक्रो नहीं!) ब्लैक बॉक्स परीक्षण करना चाहता हूं।पूरे युद्ध को वाइल्डफली एम्बेडेड पर तैनात करके मैवेन युद्ध परियोजना का परीक्षण करने के लिए मैं आर्किलीयन कैसे स्थापित करूं?

मेरे Maven परियोजना इस

<project> 
    ... 
    <packaging>war</packaging> 

    <!-- Lots of classes in src/main/webapp and files in src/main/webapp --> 
    <dependencies> 
    <!-- Lots of compile/runtime dependencies that change very frequently --> 
    <!-- Lots of test dependencies that change very frequently --> 
    </dependencies> 
</project> 

मेरे Arquillian परीक्षण निम्न आवश्यकताओं को पूरा करने के लिए की जरूरत है जैसा दिखता है:

  • परीक्षणों में अनुप्रयोग सर्वर के लिए पूरे युद्ध तैनात। इसमें सभी उत्पादन वर्ग, सभी रनटाइम निर्भरताएं और सभी src/main/webapp फ़ाइलें शामिल हैं। एक रखरखाव परिप्रेक्ष्य से सूक्ष्म तैनाती करना असंभव है क्योंकि वर्ग निर्भरता और जार निर्भरताएं अक्सर बदलती हैं। तो हम ShrinkWrap परिनियोजन में कुछ भी गणना नहीं कर सकते हैं।
  • परीक्षण में कुछ भी हार्डकोड या arquillian.xml है कि पहले से ही Maven pom.xml से जाना जाता है। इसमें संस्करण स्ट्रिंग्स, निर्भरता सूचियां, पैकेज या कक्षा सूचियां, ऐप सर्वर स्थापना निर्देशिका आदि शामिल हैं
  • 1 से अधिक मेवेन मॉड्यूल का उपयोग न करें। मेरे युद्ध का परीक्षण करने के लिए मेरे परीक्षण एक ही मेवेन मॉड्यूल के परीक्षण फ़ोल्डर में हैं जो युद्ध का उत्पादन करता है।
    • टेस्ट बस इंटेलीजे साथ pom.xml खोलने के बाद इंटेलीजे से चलाने की आवश्यकता है:
    • उपयोगकर्ता है कि मेरे कोड चेकआउट तो बस परीक्षण चलाने में सक्षम होना चाहिए।
    • वाइल्डफली एम्बेडेड कंटेनर का उपयोग करें, इसलिए पहले कुछ भी स्थापित करने की आवश्यकता नहीं है, किसी भी प्रक्रिया को पहले चलाने की आवश्यकता नहीं है और निश्चित रूप से नहीं JBOSS_HOME पर्यावरण चर को पहले सेट करने की आवश्यकता है।
  • मुझे केवल ब्लैक बॉक्स परीक्षण में रूचि है, इसलिए मेरे सभी परीक्षण क्लाइंट के रूप में चला सकते हैं।

सिद्धांत रूप में, इस Arquillian के Maven समाधानकर्ता, एम्बेडेड कंटेनर, @RunAsClient, Maven फेल सेफ प्लगइन, कुछ arquillian.xml जादू और Maven जादू का एक बहुत के साथ सभी संभव है। लेकिन व्यावहारिक रूप से, मैं उस सामान को एकसाथ काम करने के लिए नहीं मिल सकता, और न ही मुझे इस दस्तावेज को किसी भी दस्तावेज को शामिल किया गया है, इसलिए मुझे उम्मीद है कि कोई स्पष्ट रूप से दिखा सकता है कि वे एक साथ कैसे काम कर सकते हैं।

+1

यदि आप मैक्रो परीक्षण पर विचार करते हैं, तो आप [आर्किलीयन-सूट-एक्सटेंशन] (https://github.com/ingwarsw/arquillian-suite-extension) पर एक नज़र डाल सकते हैं या Arquillian को छोड़ सकते हैं। क्यूं कर? चूंकि आर्किलियन सूक्ष्म-तैनाती के बारे में है, और ऐसा लगता है कि यह आपके लिए मामला नहीं है। एम्बेडेड जेईई ऐप सर्वर का उपयोग करना [परेशानियों के लिए पूछना] जैसा है (http://arquillian.org/blog/2012/04/13/the-danger-of-embedded-containers/) ... –

+0

वेनिला आर्किलियन वास्तव में समर्थन करना चाहिए बॉक्स के बाहर आर्किलीयन-सूट-एक्सटेंशन की विशेषताएं! –

उत्तर

3

निश्चित रूप से श्रिंकवॉप रिजॉल्वर Maven Importer (मेवेन रिजॉल्वर से उलझन में नहीं) के लिए एक मामले की तरह लगता है। Here कुछ परीक्षण हैं जो इसका उपयोग दिखा रहे हैं।

मेरे पास Gradle Importer (मुझे पता है कि आप मेवेन का उपयोग कर रहे हैं) के मामले में एक स्टैंडअलोन नमूना है, लेकिन परीक्षण निर्माण here समान है।

मेरे पास @RunAsClient और मेवेन आयातक दोनों के साथ सार्वजनिक रूप से उपलब्ध एक संपूर्ण उदाहरण नहीं है, लेकिन मेरे पास Graphene के साथ उनका उपयोग करके एक परियोजना है और यह संयोजन काम करता है :)। आम तौर पर परीक्षण इस तरह दिखना चाहिए:

@RunWith(Arquillian.class) 
public class SomeControllerIT { 

    @Deployment 
    public static WebArchive createDeployment() { 
     return ShrinkWrap.create(MavenImporter.class).loadPomFromFile("pom.xml").importBuildOutput() 
      .as(WebArchive.class); 
    } 

    @Test 
    @RunAsClient 
    public void shouldDoSth() throws Exception { 
     ... 
    } 
} 

युद्ध तैनाती के बजाय मेवेन आयातक का उपयोग क्यों करें?परीक्षण निष्पादन के बाद युद्ध बनाया जाता है, इसका मतलब है कि यदि युद्ध परीक्षण निष्पादन के दौरान युद्ध मौजूद है, तो यह पिछले निर्माण से आता है और पुराना है।

+0

धन्यवाद, आयातक काम करता है! मुझे अभी भी यह मिलता है: '[WARN क्लास org.optaconf.service.ConferenceServiceArquillianTest को मॉड्यूल में परिभाषित करने में विफल "सेवा मॉड्यूल लोडर से" परिनियोजन .optaconf-webapp.war: मुख्य ": java.lang.LinkageError: org/optaconf/सेवा/सम्मेलन सेवा सेवा प्राप्त करें (सेवा मॉड्यूल लोडर से मॉड्यूल "परिनियोजन .optaconf-webapp.war: मुख्य") ... के कारण: java.lang.NoClassDefFoundError: org/optaconf/service/सार ArquillianTest'। ऐसा लगता है कि आर्किलियन अभी भी टेस्ट क्लास को वाइल्डफ्लाई क्लासपाथ में जोड़ने की कोशिश कर रहा है, भले ही यह RunAsClient परीक्षण है? –

+1

कृपया '@ डिप्लॉयमेंट (टेस्टेबल = झूठा)' के साथ अतिरिक्त प्रयास करें। – mmatloka

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