2014-12-17 4 views
1

я должен Arquillian испытательной установки в моем приложении, и каждый из них имеет свой собственный метод развертывания:Невозможно запустить несколько тестов с Arquillian

@RunWith(Arquillian.class) 
public class CallerTest { 
    @EJB 
    private CallerPrincipalDemoSessionBean sut; 

    @Deployment 
    public static WebArchive createTestArchive1() { 
     WebArchive webArchive = ShrinkWrap.create(WebArchive.class, "test1.war") 
       .addClasses(JBossLoginContextFactory.class, CallerPrincipalDemoSessionBean.class) 
       .addAsWebInfResource("META-INF/ejb-jar.xml") 
       .addAsWebInfResource("META-INF/jboss-ejb3.xml") 
       .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml") 
       .addAsResource("users.properties") 
       .addAsResource("roles.properties"); 
     return webArchive; 
    } 

    ... 

и второй:

@RunWith(Arquillian.class) 
public class UsersTest { 

    @ArquillianResource 
    private URL serverUrl; 

    @Deployment(testable = false) 
    public static Archive createTestArchive2() { 
     return ShrinkWrap.create(WebArchive.class, "test2.war") 
       .addPackage(User.class.getPackage()) 
       .addPackage(UserFacade.class.getPackage()) 
       .addPackage(Users.class.getPackage()) 
       .addPackage(Credential.class.getPackage()) 
       .addAsResource("test-persistence.xml", "META-INF/persistence.xml") 
       .setWebXML(new File("src/test/resources/test-web.xml")) 
       .addAsWebInfResource("META-INF/jboss-web.xml") 
       .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml") 
       .addAsResource("users.properties") 
       .addAsResource("roles.properties"); 
    } 

    ... 

Когда я удалить один классов или комментариев один из методов «@Deployment» mvn test работает отлично. Но с 2 метода «@Deployment» даже тестирования одного класса с mvn test -Dtest=com.wpic.tmall.rest.UsersTest возбудит исключение:

ERROR [org.jboss.msc.service.fail] MSC000001: Failed to start service jboss.deployment.unit."test2.war".WeldStartService: org.jboss.msc.service.StartException in service jboss.deployment.unit."test2.war".WeldStartService: Failed to start service 
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1904) [jboss-msc-1.2.2.Final.jar:1.2.2.Final] 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [rt.jar:1.8.0_05] 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [rt.jar:1.8.0_05] 
    at java.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_05] 
Caused by: org.jboss.weld.exceptions.DeploymentException: org/jboss/shrinkwrap/api/asset/Asset 
    at org.jboss.weld.executor.AbstractExecutorServices.checkForExceptions(AbstractExecutorServices.java:66) 
    at org.jboss.weld.executor.AbstractExecutorServices.invokeAllAndCheckForExceptions(AbstractExecutorServices.java:43) 
    at org.jboss.weld.executor.AbstractExecutorServices.invokeAllAndCheckForExceptions(AbstractExecutorServices.java:51) 
    at org.jboss.weld.bootstrap.ConcurrentBeanDeployer.createClassBeans(ConcurrentBeanDeployer.java:72) 
    at org.jboss.weld.bootstrap.BeanDeployment.createBeans(BeanDeployment.java:260) 
    at org.jboss.weld.bootstrap.WeldStartup.deployBeans(WeldStartup.java:351) 
    at org.jboss.weld.bootstrap.WeldBootstrap.deployBeans(WeldBootstrap.java:79) 
    at org.jboss.as.weld.WeldStartService.start(WeldStartService.java:92) 
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948) [jboss-msc-1.2.2.Final.jar:1.2.2.Final] 
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881) [jboss-msc-1.2.2.Final.jar:1.2.2.Final] 
    ... 3 more 
Caused by: java.lang.NoClassDefFoundError: org/jboss/shrinkwrap/api/asset/Asset 
    at java.lang.Class.getDeclaredMethods0(Native Method) [rt.jar:1.8.0_05] 
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2688) [rt.jar:1.8.0_05] 
    at java.lang.Class.getDeclaredMethods(Class.java:1962) [rt.jar:1.8.0_05] 
    at java.lang.Class.getEnclosingMethod(Class.java:1032) [rt.jar:1.8.0_05] 
    at org.jboss.weld.util.reflection.Reflections.isNonStaticInnerClass(Reflections.java:388) 
    at org.jboss.weld.util.Beans.isTypeManagedBeanOrDecoratorOrInterceptor(Beans.java:486) 
    at org.jboss.weld.bootstrap.BeanDeployer.createClassBean(BeanDeployer.java:233) 
    at org.jboss.weld.bootstrap.ConcurrentBeanDeployer$2.doWork(ConcurrentBeanDeployer.java:74) 
    at org.jboss.weld.bootstrap.ConcurrentBeanDeployer$2.doWork(ConcurrentBeanDeployer.java:72) 
    at org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:60) 
    at org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:53) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) [rt.jar:1.8.0_05] 
    ... 3 more 
Caused by: java.lang.ClassNotFoundException: org.jboss.shrinkwrap.api.asset.Asset from [Module "deployment.test2.war:main" from Service Module Loader] 
    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:213) [jboss-modules-1.3.3.Final.jar:1.3.3.Final] 
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:459) [jboss-modules-1.3.3.Final.jar:1.3.3.Final] 
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:408) [jboss-modules-1.3.3.Final.jar:1.3.3.Final] 
    at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:389) [jboss-modules-1.3.3.Final.jar:1.3.3.Final] 
    at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:134) [jboss-modules-1.3.3.Final.jar:1.3.3.Final] 
    ... 15 more 

Я использую wildfly-arquillian-container-embedded версию 8.1.0.Final для контейнера.

ответ

1

Не имеет решений, но есть некоторые небольшие советы:

  • Лучше игнорировать ваш IDE на минуту, глядя на Arquillian. Итак, во-первых: убедитесь, что вы запускаете свои тесты с помощью maven (не из IDE)
  • Будьте осторожны со встроенными контейнерами. Если бы я был Вами, я бы переключился на контейнер remote или managed, так как они более надежные. И прежний не несет никаких накладных расходов на запуск (конечно, как только он был запущен)
  • Знаете ли вы, что разница между @Deployment(testable = false) и (testable = true)?
  • Убедитесь, что в вашем архиве развертывания не хватает необходимых классов. Чтобы сделать это правда, я люблю рекурсивное дополнение через .addPackages(true, "com.company.your_module")
  • Если ничего не помогает, то вы можете попробовать различные удаленные контейнеры, такие как: JBoss AS 7.1.1, Wildfly 8.0.0

пс. this question похож на ваш.

Надеется, что это помогает немного

+0

Спасибо, но я использую Maven не IDE также я использую встроенные контейнеры, потому что это можно запустить тест с CI инструментами, как «travis-ci.org» (I также имеют некоторые другие удаленные профили для быстрого тестирования). – user1079877

+0

Кроме того, я тестировал, тест Arquillian очень медленный, потому что развертывание происходит медленно. Управляемый тест займет 17 секунд, а дистанционный тест длится 16 секунд, поэтому мне не нужно настраивать wildfly и делать настройки всего на 1 секунду. – user1079877

+0

@ user1079877, но ваши измерения также включают время запуска? Если да, не учитывайте этот фактор, как с удаленным, это один раз для всех тестов. Но время здесь не самое важное - я рекомендовал вам «удаленный/управляемый» контейнер из-за надежности и стабильности. –

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