2013-02-05 9 views
5

Arquillian kullanarak entegrasyon testleri oluşturmak istiyorum. Dağıtım olarak, üretimde dağıtmak için kullanılan kulağı kullanmak istiyorum. benim test sınıfı çalıştırdığınızda Test sınıfı bulunamadı çünkü ben bir Java.Lang.ClassNotFoundException olsunİçe aktarılan bir kulak dosyasına nasıl test sınıfları eklenir ve sunucu tarafı arquillian ile nasıl çalıştırılır?

@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); 
} 

:

Yani bu benim dağıtımıdır. Tespit edilebilen = dağıtımı ayarlayabildiğimi biliyorum, ancak devam uzantısı çalışmıyor: bkz. arquillian persistence extension doesn't work.

Bu sorunu nasıl çözebilirim? Test sınıfımı dağıtımıma eklemenin bir yolu var mı? Yoksa dağıtımımı başka bir şekilde mi oluşturmalıyım?

cevap

3

elle Sen Cheesus tarafından sağlanan şekilde kullanabilirsiniz

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

gibi kulak içindeki savaşa test sınıf ekleyebilir. Mevcut EAR ile uğraşırken, testleri yürüten SAVAŞI, diğer JRE'lerle birlikte diğer JAV'lara eklediğim gerçek testlerden ayırmayı tercih ediyorum. Benim dağıtım şöyle görünür:

@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; 
} 

Bildirim yöntemleri application.xml ve jboss-deployment-structure.xml değiştirmek için. JAR'ı EAR'ın içinde bir EjbModule olarak prodüktif olarak başlatmak için bunlara ihtiyacım var.

Örnek nasıl application.xml değiştirmek yapın:

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); 

} 
İlgili konular