2016-08-03 3 views
0

初めてJUnitの単純なテスト以外のテストを行った。私は非常に古いEJB2.0 AntプロジェクトでArquillianをセットアップしましたが、ここでは行き詰まっています。Arquillian - いくつかの外部瓶の問題

はArquillianを設定します。

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

私は、コンテナを打つデータソースを取得し、テーブルを照会することができますよ。しかし、他のJARに依存するコードを使用するテストを実行している場合、またはテストコード自体が他のJARに依存する場合、ClassNotFoundExceptionが発生します。

例えば、私のテストケースでは、httpclient-4.5.2.jarhttpcore-4.4.4.jarを使用してHTTPリクエストを作成しようとしていますが、Eclipse junitテストコンソールの中にCaused by: java.lang.ClassNotFoundException: No ClassLoaders found for: org.apache.http.protocol.HttpContextがあります。 Eclipseのクラスパスにこれらのjarファイルがあり、Codehaus Cargoフレームワークを使って同じHTTPテストを実行すると動作します。

別の例では、クラスインスタンスを初期化しています。このクラスインスタンスは、apacheのvfs2 jarを使用してsftp呼び出しを行います。次に、jboss server.logの内部でこのエラーが発生します。Caused by: java.lang.ClassNotFoundException: No ClassLoaders found for: org.apache.commons.vfs2.FileSelector

私は間違っていますか?

答えて

0

Arquillianは分離型なので、外部クラスをJavaアーカイブに含める必要があると思います。

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

次に、展開が機能するはずです。