2017-06-17 31 views
0

我正在嘗試爲大型項目編寫簡單的arquillian測試。有一些自動創建的用於查詢數據庫的QClasses,但似乎在Shrinkwrap.create()運行時,這些類尚未創建,部署從未完成。使用shrinkwrap和MavenImporter創建arquillian webArchive時由於丟失queryDSL類而導致編譯錯誤

MyTest的類:

package pkg.integration.service; 

import static org.junit.Assert.assertNotNull; 

import javax.inject.Inject; 

import org.jboss.arquillian.container.test.api.Deployment; 
import org.jboss.arquillian.junit.Arquillian; 
import org.jboss.shrinkwrap.api.ShrinkWrap; 
import org.jboss.shrinkwrap.api.spec.WebArchive; 
import org.jboss.shrinkwrap.resolver.api.maven.archive.importer.MavenImporter; 
import org.junit.Test; 
import org.junit.runner.RunWith; 
import pkg.service.TestService; 

@RunWith(Arquillian.class) 
public class MyTest { 

    @Deployment 
    public static WebArchive getDeploy() { 
    return ShrinkWrap.create(MavenImporter.class) 
       .loadPomFromFile("/path/to/pom.xml") 
       .importBuildOutput() 
       .as(WebArchive.class); 
    } 

    @Inject 
    private TestService testService; 

    @Test 
    public void test() { 
     assertNotNull(testService); 
    } 

} 

執行堆棧跟蹤:

java.lang.RuntimeException: Could not invoke deployment method: public static org.jboss.shrinkwrap.api.spec.WebArchive br.com.company.integration.service.MyTest.getDeploy() 

at org.jboss.arquillian.container.test.impl.client.deployment.AnnotationDeploymentScenarioGenerator.invoke(AnnotationDeploymentScenarioGenerator.java:181) 
at org.jboss.arquillian.container.test.impl.client.deployment.AnnotationDeploymentScenarioGenerator.generateDeployment(AnnotationDeploymentScenarioGenerator.java:103) 
at org.jboss.arquillian.container.test.impl.client.deployment.AnnotationDeploymentScenarioGenerator.generate(AnnotationDeploymentScenarioGenerator.java:64) 
at org.jboss.arquillian.container.test.impl.client.deployment.DeploymentGenerator.generateDeployment(DeploymentGenerator.java:79) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:498) 
at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:96) 
at org.jboss.arquillian.core.impl.EventContextImpl.invokeObservers(EventContextImpl.java:103) 
at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:85) 
at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:143) 
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:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:498) 
at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:96) 
at org.jboss.arquillian.core.impl.EventContextImpl.invokeObservers(EventContextImpl.java:103) 
at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:85) 
at org.jboss.arquillian.test.impl.TestContextHandler.createClassContext(TestContextHandler.java:92) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:498) 
at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:96) 
at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:92) 
at org.jboss.arquillian.test.impl.TestContextHandler.createSuiteContext(TestContextHandler.java:73) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:498) 
at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:96) 
at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:92) 
at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:143) 
at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:114) 
at org.jboss.arquillian.test.impl.EventTestRunnerAdaptor.beforeClass(EventTestRunnerAdaptor.java:87) 
at org.jboss.arquillian.junit.Arquillian$2.evaluate(Arquillian.java:202) 
at org.jboss.arquillian.junit.Arquillian.multiExecute(Arquillian.java:431) 
at org.jboss.arquillian.junit.Arquillian.access$200(Arquillian.java:55) 
at org.jboss.arquillian.junit.Arquillian$3.evaluate(Arquillian.java:219) 
at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
at org.jboss.arquillian.junit.Arquillian.run(Arquillian.java:167) 
at org.junit.runner.JUnitCore.run(JUnitCore.java:137) 
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68) 
at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:51) 
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:237) 
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70) 
Caused by: java.lang.reflect.InvocationTargetException 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:498) 
at org.jboss.arquillian.container.test.impl.client.deployment.AnnotationDeploymentScenarioGenerator.invoke(AnnotationDeploymentScenarioGenerator.java:177) 
... 49 more 
[omitted] 


    symbol: class QConfiguracao 
    location: package com.company.portal.model, /path/to/src/main/java/pkg/portal/service/UserService.java:[124,38] cannot find symbol 

[... A LOT of 'cannot find symbol' errors pointing to QClasses] 
[... A LOT of 'cannot find symbol' errors pointing to QClasses] 
[... A LOT of 'cannot find symbol' errors pointing to QClasses] 

    location: package pkg.vo 
at org.jboss.shrinkwrap.resolver.impl.maven.archive.packaging.AbstractCompilingProcessor.constructCompilationException(AbstractCompilingProcessor.java:120) 
at org.jboss.shrinkwrap.resolver.impl.maven.archive.packaging.AbstractCompilingProcessor.compile(AbstractCompilingProcessor.java:92) 
at org.jboss.shrinkwrap.resolver.impl.maven.archive.packaging.WarPackagingProcessor.importBuildOutput(WarPackagingProcessor.java:84) 
at org.jboss.shrinkwrap.resolver.impl.maven.archive.packaging.WarPackagingProcessor.importBuildOutput(WarPackagingProcessor.java:50) 
at org.jboss.shrinkwrap.resolver.impl.maven.archive.importer.PomEquippedMavenImporterImpl.importBuildOutput(PomEquippedMavenImporterImpl.java:49) 
at org.jboss.shrinkwrap.resolver.impl.maven.archive.importer.PomEquippedMavenImporterImpl.importBuildOutput(PomEquippedMavenImporterImpl.java:44) 
at pkg.service.MyTest.getDeploy(MyTest.java:27) 
... 54 more 


Test ignored. 
jun 16, 2017 8:32:38 PM org.jboss.arquillian.core.impl.ObserverImpl resolveArguments 
ADVERTÊNCIA: Argument 2 for ArquillianServiceDeployer.undeploy is null. It won't be invoked. 

Process finished with exit code 255 

構建>:

<build> 
    <finalName>${project.artifactId}</finalName> 

    <resources> 
     <resource> 
      <directory>src/main/resources</directory> 
      <filtering>true</filtering> 
      <excludes> 
       <exclude>**/*.sql</exclude> 
      </excludes> 
     </resource> 
     <resource> 
      <directory>src/main/resources/db</directory> 
      <targetPath>db</targetPath> 
      <filtering>false</filtering> 
     </resource> 
    </resources> 

    <filters> 
     <filter>${basedir}/src/main/resources/filters/${filter.name}.properties</filter> 
     [filters...] 
    </filters> 

    <plugins> 
     <plugin> 
      <artifactId>maven-dependency-plugin</artifactId> 
      <version>2.8</version> 
     </plugin> 
     <plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <configuration> 
       <fork>true</fork> 
      </configuration> 
     </plugin> 
     <plugin> 
      <artifactId>maven-resources-plugin</artifactId> 
      <dependencies> 
       <dependency> 
        <groupId>org.apache.maven.shared</groupId> 
        <artifactId>maven-filtering</artifactId> 
        <version>1.3</version> 
       </dependency> 
      </dependencies> 
     </plugin> 
     <plugin> 
      <artifactId>maven-war-plugin</artifactId> 
      <extensions>false</extensions> 
     </plugin> 

     <!-- Compila .jrxml para .jasper --> 
     <plugin> 
      <groupId>com.alexnederlof</groupId> 
      <artifactId>jasperreports-plugin</artifactId> 
      <dependencies> 
       <!--Força para ser as mesmas versões de runtime--> 
       <dependency> 
        <groupId>net.sf.jasperreports</groupId> 
        <artifactId>jasperreports</artifactId> 
        <version>${jasperreports.version}</version> 
       </dependency> 
       <dependency> 
        <groupId>net.sf.jasperreports</groupId> 
        <artifactId>jasperreports-fonts</artifactId> 
        <version>${jasperreports-fonts.version}</version> 
       </dependency> 
      </dependencies> 
     </plugin> 

     <!-- mvn backupdb:copy backupdb:restore --> 
     <plugin> 
      <groupId>com.company</groupId> 
      <artifactId>backupdb-maven-plugin</artifactId> 
      <version>0.8.3</version> 
      <configuration> 
       <databaseType>postgres</databaseType> 
       <bucketFolder>${company.db.name}/db</bucketFolder> 
       <databaseName>${company.db.name}</databaseName> 
       <postScript>src/test/resources/db/post_restore.sql</postScript> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>com.company</groupId> 
      <artifactId>company-jpa-maven-plugin</artifactId> 
      <version>${company.jpa.version}</version> 
     </plugin> 
     <plugin> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>${surefire.version}</version> 
      <configuration> 
       <includes> 
        <include>**/*Spec.java</include> <!-- Yes, .java extension --> 
        <include>**/*Test.java</include> <!-- Just in case of having also "normal" JUnit tests --> 
       </includes> 
       <argLine>-Xmx256m</argLine> 
       <properties> 
        <property> 
         <name>listener</name> 
         <value>com.company.testng.ListenerDominio</value> 
        </property> 
       </properties> 
       <threadCount>1</threadCount> 
       <useUnlimitedThreads>true</useUnlimitedThreads> 
      </configuration> 
      <dependencies> 
       <dependency> 
        <groupId>org.apache.maven.surefire</groupId> 
        <artifactId>surefire-junit47</artifactId> 
        <version>${surefire.version}</version> 
       </dependency> 
       <dependency> 
        <groupId>org.apache.maven.surefire</groupId> 
        <artifactId>surefire-testng</artifactId> 
        <version>${surefire.version}</version> 
       </dependency> 
      </dependencies> 
     </plugin> 

     <plugin> 
      <groupId>com.mysema.maven</groupId> 
      <artifactId>apt-maven-plugin</artifactId> 
     </plugin> 

     <plugin> 
      <groupId>org.codehaus.gmavenplus</groupId> 
      <artifactId>gmavenplus-plugin</artifactId> 
      <version>1.5</version> 
      <executions> 
       <execution> 
        <goals> 
         <goal>compile</goal> 
         <goal>addTestSources</goal> 
         <goal>testCompile</goal> 
        </goals> 
       </execution> 
      </executions> 
      <dependencies> 
       <dependency> 
        <groupId>org.codehaus.gmaven.runtime</groupId> 
        <artifactId>gmaven-runtime-2.0</artifactId> 
        <version>1.5</version> 
        <exclusions> 
         <exclusion> 
          <groupId>org.codehaus.groovy</groupId> 
          <artifactId>groovy-all</artifactId> 
         </exclusion> 
        </exclusions> 
       </dependency> 
       <dependency> 
        <groupId>org.codehaus.groovy</groupId> 
        <artifactId>groovy-all</artifactId> 
        <version>2.4.1</version> 
       </dependency> 
      </dependencies> 
      <configuration> 
       <testSources> 
        <testSource> 
         <directory>${project.basedir}/src/test/java</directory> 
         <includes> 
          <include>**/*.groovy</include> 
         </includes> 
        </testSource> 
       </testSources> 
      </configuration> 
     </plugin> 
    </plugins> 

    <pluginManagement> 
     <plugins> 
      <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.--> 
      <plugin> 
       <groupId>org.eclipse.m2e</groupId> 
       <artifactId>lifecycle-mapping</artifactId> 
       <version>1.0.0</version> 
       <configuration> 
        <lifecycleMappingMetadata> 
         <pluginExecutions> 
          <pluginExecution> 
           <pluginExecutionFilter> 
            <groupId>org.codehaus.mojo</groupId> 
            <artifactId>jasperreports-maven-plugin</artifactId> 
            <versionRange>[1.0-beta-2,)</versionRange> 
            <goals> 
             <goal>compile-reports</goal> 
            </goals> 
           </pluginExecutionFilter> 
           <action> 
            <ignore /> 
           </action> 
          </pluginExecution> 
         </pluginExecutions> 
        </lifecycleMappingMetadata> 
       </configuration> 
      </plugin> 






      <!-- we want to execute specifications --> 
      <plugin> 
       <artifactId>maven-failsafe-plugin</artifactId> 
       <version>2.14.1</version> 
       <configuration> 
        <testSourceDirectory>${project.basedir}/src/test/groovy</testSourceDirectory> 
        <includes> 
         <include>**/*Specification*</include> 
        </includes> 
       </configuration> 
       <executions> 
        <execution> 
         <goals> 
          <goal>arquillian-wildfly-remote</goal> 
          <goal>verify</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 

      <!-- this is required to get test resources filtered properly --> 
      <plugin> 
       <artifactId>maven-resources-plugin</artifactId> 
       <version>2.5</version> 
      </plugin> 
     </plugins> 
    </pluginManagement> 
</build> 

dependencyManagement>

<dependencyManagement> 
    <dependencies> 

    <dependency> 
     <groupId>org.jboss.shrinkwrap.resolver</groupId> 
     <artifactId>shrinkwrap-resolver-bom</artifactId> 
     <version>${version.org.jboss.shrinkwrap.resolver}</version> 
     <type>pom</type> 
     <scope>import</scope> 
    </dependency> 

    <dependency> 
     <groupId>org.jboss.shrinkwrap</groupId> 
     <artifactId>shrinkwrap-bom</artifactId> 
     <version>${version.org.jboss.shrinkwrap}</version> 
     <type>pom</type> 
     <scope>import</scope> 
    </dependency> 

    <dependency> 
     <groupId>org.jboss.arquillian</groupId> 
     <artifactId>arquillian-bom</artifactId> 
     <version>${version.org.jboss.arquillian}</version> 
     <type>pom</type> 
     <scope>import</scope> 
    </dependency> 

    <dependency> 
     <groupId>org.jboss.arquillian.junit</groupId> 
     <artifactId>arquillian-junit-core</artifactId> 
     <version>${version.org.jboss.arquillian}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.jboss.arquillian.junit</groupId> 
     <artifactId>arquillian-junit-container</artifactId> 
     <version>${version.org.jboss.arquillian}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.jboss.arquillian.junit</groupId> 
     <artifactId>arquillian-junit-standalone</artifactId> 
     <version>${version.org.jboss.arquillian}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.jboss.arquillian.spock</groupId> 
     <artifactId>arquillian-spock-container</artifactId> 
     <version>1.0.0.Final</version> 
    </dependency> 

    <dependency> 
     <groupId>${project.groupId}</groupId> 
     <artifactId>company-external-bom</artifactId> 
     <version>2.0.3</version> 
     <type>pom</type> 
     <scope>import</scope> 
    </dependency> 

    <dependency> 
     <groupId>${project.groupId}</groupId> 
     <artifactId>company-parent-test</artifactId> 
     <version>1.0.0</version> 
     <scope>import</scope> 
     <type>pom</type> 
    </dependency> 

    <dependency> 
     <groupId>org.jboss.spec</groupId> 
     <artifactId>jboss-javaee-6.0</artifactId> 
     <version>3.0.1.Final</version> 
     <type>pom</type> 
     <scope>import</scope> 
    </dependency> 

    </dependencies> 
</dependencyManagement> 

那麼...我錯過了什麼? PS:我正在通過Intellij執行測試。在終端A mvn clean package給了我:

[ERROR] /path/to/src/test/java/company/service/MyTest.java:[8,33] error: package org.jboss.arquillian.junit does not exist 
[ERROR] /path/to/src/test/java/company/service/MyTest.java:[16,9] error: cannot find symbol 
+0

請顯示您的pom.xml中的所有依賴關係和' ...'部分 –

+0

@SteveC dependencyManagement並添加構建。但我仍然沒有添加依賴關係本身,因爲它是一個非常非常長的列表。當然這是需要的? – user1851150

回答

0

是的,MavenImporter可能不是您的最佳解決方案 - 它需要您的依賴堆棧,編譯src/main/java目錄中的所有類,獲取所有資源併合並生成的Web存檔中的所有內容。它不考慮您使用的任何插件或其他目錄。

另一方面,EmbeddedMaven構建整個項目,因此您可以使用包含所有必需的類/依賴項的歸檔文件。

至於錯誤:package org.jboss.arquillian.junit does not exist似乎你沒有正確的依賴你的類路徑。請分享您在您的pom.xml文件或依賴關係樹中的<dependencies>

相關問題