2012-03-16 10 views
9

मैं अपने arquillian.xml में अलग कंटेनर कॉन्फ़िगरेशन रखना चाहता हूं और उन्हें अपने परीक्षण में चुनना चाहता हूं। लेकिन मैं किसी कंटेनर को लोड करने में असमर्थ हूं लेकिन डिफ़ॉल्ट एक।arquillian.xml से qualifyer द्वारा एक कंटेनर का चयन कैसे करें?

<?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> 

टेस्ट मामला:

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

लेकिन परीक्षण शुरू नहीं करता है क्योंकि Arquilian कंटेनर

org.jboss.arquillian.container.test.impl.client नहीं मिल रहा है। तैनाती। वैधता अपवाद: परिनियोजन Scenario में रजिस्ट्री में किसी परिभाषित कंटेनर से मेल नहीं खाते हैं। वेल्ड। संभावित कारण हैं: क्लासपाथ पर कोई तैनाती कंटेनर नहीं मिला है या आपने @ org.jboss.arquillian.container.test.api परिभाषित किया है। @ org.jboss.arquillian.container.test.api के साथ परिनियोजन। लक्ष्य नियंत्रणकर्ता मूल्य से मेल नहीं खाता किसी भी पाया/कॉन्फ़िगर किया गया कंटेनर (देखें arquillian.xml कंटेनर @ क्वालीफायर)

मैं स्रोत में एक नज़र था और केवल _DEFAULT_ कंटेनर खोजने में कि Aquilian मिल गया है।

परीक्षण कार्य करते हैं, जब मैं तैनाती विधि से @TargetsContainer("weld") हटा देता हूं। तो मुझे लगता है कि सामान्य परीक्षण ठीक है।

परीक्षण भी काम करते हैं यदि मैं कंटेनर कॉन्फ़िगरेशन को default="true" (<container qualifier="weld" default="ture">) में संशोधित करता हूं तो परीक्षण कार्य करता है, इसलिए मुझे लगता है कि कॉन्फ़िगरेशन फ़ाइल लोड हो गई है।

क्या किसी के पास कोई विचार है कि क्या गलत हो रहा है?


विवरण

पूरा स्टैकट्रेस: ​​

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 निर्भरता

<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

से कंटेनर को चुनने के लिए आप देख रहे हैं एक साथ कई कंटेनर चलाने के लिए? यदि ऐसा है, तो मैन्युअल से यह पृष्ठ कहता है कि एकाधिक 'कंटेनर' तत्वों को 'समूह' में रखा जाना चाहिए: https://docs.jboss.org/author/display/ARQ/Multiple+Containers – oksayt

+0

@oksayt नहीं, मैं नहीं करता उन्हें एक बार में चलाने के लिए चाहते हैं, मेरे पास दो प्रकार के परीक्षण होंगे, जिनके लिए वेल्ड-से और एक दूसरी तरह की आवश्यकता होती है जिसके लिए एक पूर्ण ग्लासफ़िश कंटेनर की आवश्यकता होती है। - मुझे पता है कि मैं वेल्ड परीक्षणों के लिए ग्लासफ़िश का उपयोग कर सकता हूं, लेकिन यह धीमा होने के लिए बहुत कुछ होगा। – Ralph

उत्तर

7

आप कंटेनर के लिए एक निश्चित config के माध्यम से Maven से arquillian.launch प्रणाली संपत्ति सेट करते हैं आप लॉन्च करना चाहते हैं जो काम करेगा। आप देख सकते हैं कि हम क्या https://github.com/seam/solder/blob/develop/testsuite/pom.xml

+0

यह उत्तर मुझे बहुत मदद नहीं करता है, लेकिन मैं बक्षीस को समाप्त नहीं करना चाहता हूं। – Ralph

+0

क्या आप मेवेन का उपयोग कर रहे हैं? – LightGuard

+0

हां (आप प्रश्न में पोम के कुछ हिस्सों को देख सकते हैं)। लेकिन यह बात नहीं है।मुझे एक कंटेनर और कुछ परीक्षणों के साथ कुछ परीक्षण चलाने की जरूरत है। तो मैवेन प्रोफाइल काम नहीं करते हैं, क्योंकि वे सभी परीक्षणों के लिए तय हैं। – Ralph

संबंधित मुद्दे