2016-08-03 9 views
0

Mein erstes Mal, wenn Sie andere Tests als einfache JUnit Test. Ich habe Arquillian auf einem sehr alten EJB2.0 Ant-Projekt eingerichtet und ich stoße hier auf eine Sackgasse.Arquillian - einige externe Jar Probleme

mit Arquillian ein:

@Deployment 
public static Archive<?> createDeployment() { 
    JavaArchive jar = ShrinkWrap.create(JavaArchive.class) 
      .addPackages(true, "com.admin", "com.framework", "com.pharmacy") 
      .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml"); 

    EnterpriseArchive ear = ShrinkWrap.create(EnterpriseArchive.class) 
      .as(ZipImporter.class) 
      .importFrom(new File("C:\\jboss-4.2.3.GA\\server\\default\\administration.ear")) 
      .as(EnterpriseArchive.class); 

    ear.addAsLibrary(jar); 
    return ear; 
} 

Ich bin in der Lage, den Behälter zu treffen, um die Datenquelle zu erhalten und die Tabellen abfragen. Wenn ich jedoch einen Test verwende, der Codes verwendet, die von anderen JARs abhängen, oder wenn der Testcode selbst von anderen JARs abhängt, bekomme ich die ClassNotFoundException.

Zum Beispiel in meinem Testfall, ich versuche, eine HTTP-Anforderung mit httpclient-4.5.2.jar und httpcore-4.4.4.jar zu machen, dann bin ich Caused by: java.lang.ClassNotFoundException: No ClassLoaders found for: org.apache.http.protocol.HttpContext innerhalb der Eclipse JUnit-Testkonsole bekommen. Ich habe diese Gläser in meinem Eclipse-Klassenpfad, und es funktioniert, wenn ich denselben HTTP-Test unter Verwendung des Codehaus Cargo-Rahmens führe.

Ein anderes Beispiel, ich initialisiere eine Klasseninstanz, und diese Klasseninstanz macht einen Sftp-Aufruf mit Apache VFS2 Glas. Dann bekomme ich diesen Fehler innerhalb des jboss server.log: Caused by: java.lang.ClassNotFoundException: No ClassLoaders found for: org.apache.commons.vfs2.FileSelector

Was mache ich falsch?

Antwort

0

Da Arquillian eine Isolation ist, müssen Sie die externen Klassen in Ihr Java-Archiv aufnehmen.

JavaArchive jar = ShrinkWrap.create(JavaArchive.class) 
     .addPackages(true, "com.admin", "com.framework", "com.pharmacy") 
     .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml") 
     // 
     // You need to include to external classes used 
     // in your Java archive using addClass/addClasses 
     // 
     .addClasses(ExtA.class, ExtB.class) 
     // 
     // or the entire package if needed 
     // 
     .addPackage(true, "my.ext.package"); 

Dann sollte die Bereitstellung funktionieren.

Verwandte Themen