2013-02-05 6 views
5

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

@Deployment(testable = true) 
public static Archive<?> createDeployment() { 
    return ShrinkWrap 
      .create(ZipImporter.class, "test.ear") 
      .importFrom(new File("simple-webservice-ear-1.0.0-SNAPSHOT.ear")) 
      .as(EnterpriseArchive.class); 
} 

जब मैं अपने परीक्षण वर्ग चलाने मैं एक java.lang.ClassNotFoundException मिलता है क्योंकि परीक्षण वर्ग नहीं मिला है:

तो यह मेरी तैनाती है। मुझे पता है कि मैं तैनाती पर टेस्टेबल = झूठा सेट कर सकता हूं लेकिन फिर दृढ़ता विस्तार काम नहीं करता है: arquillian persistence extension doesn't work देखें।

मैं इस समस्या को कैसे हल कर सकता हूं? क्या मेरी टेस्ट क्लास तैनाती में जोड़ने का कोई तरीका है? या मुझे अपनी तैनाती को किसी अन्य तरीके से बनाना चाहिए?

उत्तर

3

आप मैन्युअल रूप से परीक्षण वर्ग युद्ध करने के लिए कान के अंदर की तरह

WebArchive war = ear.getAsType(WebArchive.class, "/mywarname.war"); 
war.addClass(MyTestClass.class); 
2

जोड़ सकते हैं आप Cheesus द्वारा प्रदान की जिस तरह से उपयोग कर सकते हैं। जब मैं मौजूदा ईएआर से निपट रहा हूं, तो मैं उन परीक्षणों को चलाने के लिए पसंद करता हूं जो परीक्षणों को चलाते हैं, जो मैंने विशेष परीक्षणों से अन्य परीक्षण ईजेबी के साथ किया है। मेरे तैनाती इस तरह दिखता है:

@Deployment 
public static EnterpriseArchive createDeployment() { 

    String path = System.getProperty(EAR_PATH); 
    File f = new File(path); 
    EnterpriseArchive ear = ShrinkWrap.createFromZipFile(EnterpriseArchive.class, f); 

    final JavaArchive foobarEjb = ShrinkWrap.create(JavaArchive.class, "foobarEjb.jar"); 

    foobarEjb.addClasses(
        MyTest1.class, 
        MyTest2.class); 
    ear.addAsModule(foobarEjb); 


    final WebArchive war = ShrinkWrap.create(WebArchive.class, "test.war") 
      .addAsWebInfResource("WEB-INF/web.xml") 
      .addAsWebResource("index.xhtml"); 

    ear.addAsModule(Testable.archiveToTest(war)); 

    modifyApplicationXML(ear); 
    modifyJBossDeploymentStructure(ear); 


    return ear; 
} 

सूचना तरीकों application.xml और jboss-deployment-structure.xml संशोधित करने के लिए। मुझे इन्हें जार को ईएआर के अंदर एक ईजेबी मॉड्यूल के रूप में प्रारंभिक रूप से प्रारंभ करने की आवश्यकता है।

उदाहरण है कि कैसे मैं application.xml बदल सकता हूँ:

private static void modifyApplicationXML(EnterpriseArchive ear) { 
    Node node = ear.get("META-INF/application.xml"); 

    DescriptorImporter<ApplicationDescriptor> importer = Descriptors.importAs(ApplicationDescriptor.class, "test"); 
    ApplicationDescriptor desc = importer.fromStream(node.getAsset().openStream()); 

    String xml = desc.exportAsString(); 

    // remove lib definition 
    xml = xml.replaceAll("<library-directory>.*<\\/library-directory>", ""); 

    desc = (ApplicationDescriptor) importer.fromString(xml); 
    // append foobar test ejbs 
    desc.ejbModule("foobarEjb.jar"); 
    // append test war 
    desc.webModule("test.war", "/test"); 
    // append lib definition 
    desc.libraryDirectory("lib/"); 

    Asset asset = new StringAsset(desc.exportAsString()); 

    ear.delete(node.getPath()); 
    ear.setApplicationXML(asset); 

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