2016-08-03 5 views
0

Мое первое время, выполняющее любое тестирование, отличное от простого теста JUnit. У меня есть Аркиллиан, настроенный на очень старый проект EJB2.0 Ant, и я нахожусь здесь в тупике.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.

Например, в моем тесте, я пытаюсь сделать запрос HTTP, используя httpclient-4.5.2.jar и httpcore-4.4.4.jar, то я получаю Caused by: java.lang.ClassNotFoundException: No ClassLoaders found for: org.apache.http.protocol.HttpContext внутри тестовой JUnit консоли Eclipse. У меня есть эти банки в моем пути класса Eclipse, и он работает, когда я запускаю тот же HTTP-тест, используя Framework Codehaus Cargo.

Другой пример: я инициализирую экземпляр класса, и этот экземпляр класса вызывает вызов sftp с использованием apache vfs2 jar. Затем я получаю эту ошибку внутри 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"); 

Тогда развертывание должно работать.

Смежные вопросы