2012-03-16 14 views
9

Tôi muốn có các cấu hình vùng chứa khác nhau trong tệp arquillian.xml của mình và chọn chúng trong thử nghiệm của mình. Nhưng tôi không thể tải bất kỳ vùng chứa nào trừ vùng chứa mặc định.Làm cách nào để chọn một vùng chứa bởi trình điều khiển từ arquillian.xml?

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<arquillian 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://jboss.org/schema/arquillian" 
    xsi:schemaLocation="http://jboss.org/schema/arquillian http://www.jboss.org/schema/arquillian/arquillian_1_0.xsd"> 

    <container qualifier="weld" default="false"> 
    </container> 
</arquillian> 

Kiểm tra trường hợp:

@Deployment(name="depl1") 
@TargetsContainer("weld") 
public static JavaArchive createTestArchive() throws UnsupportedEncodingException { 
    return ShrinkWrap 
      .create(JavaArchive.class, "test.jar") 
      .addClasses(SomeOtherCdiService.class) 
      .addAsManifestResource(new ByteArrayAsset(beansXmlContent.getBytes("utf-8")), ArchivePaths.create("beans.xml")); 
} 

@Test 
@OperateOnDeployment("depl1") 
public void shouldBeAbleToInjectInject() { 
    assertNotNull(someOtherCdiService); 
} 

Nhưng các xét nghiệm không bắt đầu vì Arquilian không tìm thấy container

org.jboss.arquillian.container.test.impl.client. deployment.ValidationException: DeploymentScenario chứa các mục tiêu không khớp với bất kỳ Vùng chứa nào được định nghĩa trong sổ đăng ký. hàn. Nguyên nhân có thể là: Không tìm thấy Vùng chứa có thể triển khai trên Classpath hoặc bạn đã xác định một số @ org.jboss.arquillian.container.test.api.Deployment với giá trị @ org.jboss.arquillian.container.test.api.TargetsContainer không phù hợp với bất kỳ tìm thấy/container cấu hình (xem arquillian.xml chứa @ vòng loại)

tôi đã có một cái nhìn vào nguồn và phát hiện ra rằng Aquilian chỉ trong việc tìm kiếm _DEFAULT_ container.

Thử nghiệm hoạt động, khi tôi xóa @TargetsContainer("weld") khỏi phương pháp triển khai. Vì vậy, tôi nghĩ rằng thử nghiệm chung là ok.

Các thử nghiệm cũng hoạt động nếu tôi sửa đổi cấu hình vùng chứa thành default="true" (<container qualifier="weld" default="ture">) thì thử nghiệm hoạt động, vì vậy tôi nghĩ tệp cấu hình được tải.

Có ai có ý tưởng gì đang xảy ra không?


Chi tiết

Hoàn stacktrace:

org.jboss.arquillian.container.test.impl.client.deployment.ValidationException: 
DeploymentScenario contains targets not matching any defined Container in the registry. weld. 
Possible causes are: No Deployable Container found on Classpath or your have defined a 
@org.jboss.arquillian.container.test.api.Deployment with a 
@org.jboss.arquillian.container.test.api.TargetsContainer value that does not match any found/configured Containers 
(see arquillian.xml [email protected]) 
at org.jboss.arquillian.container.test.impl.client.deployment.DeploymentGenerator.validate(DeploymentGenerator.java:102) 
at org.jboss.arquillian.container.test.impl.client.deployment.DeploymentGenerator.generateDeployment(DeploymentGenerator.java:84) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:597) 
at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:90) 
at org.jboss.arquillian.core.impl.EventContextImpl.invokeObservers(EventContextImpl.java:99) 
at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:81) 
at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:134) 
at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:114) 
at org.jboss.arquillian.core.impl.EventImpl.fire(EventImpl.java:67) 
at org.jboss.arquillian.container.test.impl.client.ContainerEventController.execute(ContainerEventController.java:100) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:597) 
at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:90) 
at org.jboss.arquillian.core.impl.EventContextImpl.invokeObservers(EventContextImpl.java:99) 
at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:81) 
at org.jboss.arquillian.test.impl.TestContextHandler.createClassContext(TestContextHandler.java:75) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:597) 
at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:90) 
at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:88) 
at org.jboss.arquillian.test.impl.TestContextHandler.createSuiteContext(TestContextHandler.java:60) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:597) 
at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:90) 
at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:88) 
at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:134) 
at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:114) 
at org.jboss.arquillian.test.impl.EventTestRunnerAdaptor.beforeClass(EventTestRunnerAdaptor.java:80) 
at org.jboss.arquillian.junit.Arquillian$2.evaluate(Arquillian.java:179) 
at org.jboss.arquillian.junit.Arquillian.multiExecute(Arquillian.java:311) 
at org.jboss.arquillian.junit.Arquillian.access$100(Arquillian.java:46) 
at org.jboss.arquillian.junit.Arquillian$3.evaluate(Arquillian.java:196) 
at org.junit.runners.ParentRunner.run(ParentRunner.java:300) 
at org.jboss.arquillian.junit.Arquillian.run(Arquillian.java:144) 
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 

pom.xml Dependencies

<dependency> 
     <groupId>javax.enterprise</groupId> 
     <artifactId>cdi-api</artifactId> 
     <version>1.0-SP4</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>javax.annotation</groupId> 
     <artifactId>jsr250-api</artifactId> 
     <scope>provided</scope> 
     <version>1.0</version> 
    </dependency> 
    <dependency> 
     <groupId>javax.validation</groupId> 
     <artifactId>validation-api</artifactId> 
     <scope>provided</scope> 
     <version>1.0.0.GA</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-validator</artifactId> 
     <version>4.0.0.GA</version> 
     <scope>provided</scope> 
     <exclusions> 
      <exclusion> 
       <artifactId>slf4j-api</artifactId> 
       <groupId>org.slf4j</groupId> 
      </exclusion> 
     </exclusions> 
    </dependency> 

    <dependency> 
     <groupId>javax.faces</groupId> 
     <artifactId>jsf-api</artifactId> 
     <version>2.0</version> 
     <scope>provided</scope> 
    </dependency> 


    <!-- ejb --> 

    <dependency> 
     <groupId>javax.ejb</groupId> 
     <artifactId>ejb-api</artifactId> 
     <version>3.0</version> 
     <scope>provided</scope> 
    </dependency> 



    <!-- Test --> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.10</version> 
     <scope>test</scope> 
    </dependency> 

    <dependency> 
     <groupId>org.hamcrest</groupId> 
     <artifactId>hamcrest-core</artifactId> 
     <version>${hamcrest.version}</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.hamcrest</groupId> 
     <artifactId>hamcrest-library</artifactId> 
     <version>${hamcrest.version}</version> 
     <scope>test</scope> 
    </dependency> 

    <dependency> 
     <groupId>org.jboss.arquillian.junit</groupId> 
     <artifactId>arquillian-junit-container</artifactId> 
     <version>1.0.0.CR6</version> 
     <scope>test</scope> 
    </dependency> 

    <dependency> 
     <groupId>org.jboss.arquillian.container</groupId> 
     <artifactId>arquillian-weld-se-embedded-1.1</artifactId> 
     <version>1.0.0.CR3</version> 
     <!-- works with arquillian core 1.0.0.CR6 --> 
     <scope>test</scope> 
    </dependency> 

    <!-- do not use org.jboss.weld.se:weld-se because is contains the CODE 
     of slf4j in an not compatible version so we need the parts of weld-se seperate: 
     weld-se-core, weld-core, org.javassist, slf4j-jdk14 https://issues.jboss.org/browse/WELD-903 --> 

    <dependency> 
     <groupId>org.jboss.weld.se</groupId> 
     <artifactId>weld-se-core</artifactId> 
     <version>1.1.5.Final</version> 
     <scope>test</scope> 
    </dependency> 

    <dependency> 
     <groupId>org.jboss.weld</groupId> 
     <artifactId>weld-core</artifactId> 
     <version>1.1.5.Final</version> 
     <exclusions> 
      <exclusion> 
       <artifactId>slf4j-api</artifactId> 
       <groupId>org.slf4j</groupId> 
      </exclusion> 
     </exclusions> 
     <scope>test</scope> 
    </dependency> 

    <dependency> 
     <groupId>org.javassist</groupId> 
     <artifactId>javassist</artifactId> 
     <version>3.14.0-GA</version> 
     <scope>test</scope> 
    </dependency> 

    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-jdk14</artifactId> 
     <version>1.6.1</version> 
     <scope>test</scope> 
    </dependency> 
+0

Bạn đang tìm kiếm để chạy nhiều vùng chứa cùng một lúc? Nếu vậy, trang này từ hướng dẫn sử dụng cho biết nhiều phần tử 'container' sẽ được đặt trong một nhóm': https://docs.jboss.org/author/display/ARQ/Multiple+Containers – oksayt

+0

@oksayt Không, tôi không muốn chạy chúng cùng một lúc, tôi sẽ có hai loại kiểm tra, một loại yêu cầu mối hàn và loại thứ hai đòi hỏi một thùng chứa Glassfish hoàn chỉnh. - Tôi biết tôi có thể sử dụng Glassfish cho các bài kiểm tra hàn, nhưng điều này sẽ có nhiều chậm. – Ralph

Trả lời

7

Nếu bạn thiết lập thuộc tính từ maven arquillian.launch hệ thống thông qua một cấu hình chắc chắn để container bạn muốn khởi chạy sẽ hoạt động. Bạn có thể xem những gì chúng tôi đã làm trong Hàn tại https://github.com/seam/solder/blob/develop/testsuite/pom.xml

+0

Câu trả lời này không giúp tôi rất nhiều, nhưng tôi không muốn mất tiền thưởng. – Ralph

+0

Bạn đang sử dụng maven? – LightGuard

+0

Có (bạn có thể thấy các phần của pom trong câu hỏi). Nhưng đây không phải vấn đề.Tôi cần phải chạy một số thử nghiệm với một container và một số xét nghiệm với một container khác. Vì vậy, hồ sơ Maven không hoạt động, bởi vì chúng được cố định cho tất cả các bài kiểm tra. – Ralph