Me gustaría probar nuestro servicio REST con solicitudes HTTP (un poco de prueba de blackbox). Sin embargo, después de un par de horas buscando en Google y probando diferentes configuraciones, todavía no puedo iniciar Jetty correctamente. Esta es la configuración de mi corriente (I intentado varias versiones diferentes):Configuración de pruebas de integración utilizando Spring/Jetty (o Tomcat)/Maven para pruebas REST
pom.xml
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.8</version>
<configuration>
<junitArtifactName>junit:junit</junitArtifactName>
<excludes>
<exclude>**/*_Roo_*</exclude>
<exclude>**/*Util*</exclude>
<exclude>**/*IT*</exclude>
</excludes>
<forkMode>once</forkMode>
<argLine>-javaagent:'${settings.localRepository}/org/springframework/spring-instrument/${org.springframework-version}/spring-instrument-${org.springframework-version}.jar' -javaagent:'${settings.localRepository}/org/aspectj/aspectjweaver/${org.aspectj-version}/aspectjweaver-${org.aspectj-version}.jar'</argLine>
<useSystemClassLoader>true</useSystemClassLoader>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.8</version>
<configuration>
<forkMode>once</forkMode>
<argLine>-javaagent:'${settings.localRepository}/org/springframework/spring-instrument/${org.springframework-version}/spring-instrument-${org.springframework-version}.jar' -javaagent:'${settings.localRepository}/org/aspectj/aspectjweaver/${org.aspectj-version}/aspectjweaver-${org.aspectj-version}.jar'</argLine>
<useSystemClassLoader>false</useSystemClassLoader>
</configuration>
<executions>
<execution>
<id>integration-test</id>
<goals>
<goal>integration-test</goal>
</goals>
</execution>
<execution>
<id>verify</id>
<goals>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.10</version>
<configuration>
<scanintervalseconds>10</scanintervalseconds>
<stopkey>foo</stopkey>
<stopport>9999</stopport>
<contextpath>/${project.artifactId}</contextpath>
<connectors>
<connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
<port>9090</port>
</connector>
</connectors>
</configuration>
<executions>
<execution>
<id>start-jetty</id>
<phase>pre-integration-test</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<scanintervalseconds>0</scanintervalseconds>
<daemon>true</daemon>
</configuration>
</execution>
<execution>
<id>stop-jetty</id>
<phase>post-integration-test</phase>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
</plugin>
...
orm.xml
<!-- <context:load-time-weaver/> -->
<context:load-time-weaver weaver-class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver"/>
<context:spring-configured/>
<context:annotation-config />
<context:component-scan base-package="com.example.jump.domain">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
</context:component-scan>
<tx:annotation-driven transaction-manager="transactionManager" />
En este momento, estoy consiguiendo la excepción:
- java.lang.IllegalStateException: ClassLoader [org.mortbay.jetty.webapp.WebAppClassLoader] NO proporciona un 'addTransformer (clase Método FileTransformer) '. Especificar un LoadTimeWeaver costumbre o iniciar su máquina virtual de Java con el agente de primavera: -javaagent: org.springframework.instrument.jar
entiendo la excepción, pero yo no era capaz de arreglarlo. También intenté un par de otros enfoques, como dar el javaagent a través de MAVEN_OPTS o intentar establecer VM args en Jetty. El problema es que Google devuelve un montón de 'soluciones' para diferentes versiones y ninguna funcionaba.
Actualmente estoy bastante frustrado de que un escenario común como las pruebas de servicios REST sea tan difícil de lograr en la primavera. Entonces, si eres lo suficientemente inteligente como para encontrar la configuración correcta, por favor, compártela de una manera que incluso un mono pueda configurar y prometo que si alguna vez nos encontramos con las cervezas están conmigo.
Estas son las versiones que utilizo:
<properties>
<java-version>1.6</java-version>
<org.springframework-version>3.0.5.RELEASE</org.springframework-version>
<org.aspectj-version>1.6.9</org.aspectj-version>
<org.slf4j-version>1.5.10</org.slf4j-version>
<redis.version>1.0.0.BUILD-SNAPSHOT</redis.version>
<org.jboss.hibernate.version>3.6.0.Final</org.jboss.hibernate.version>
<net.sf.ehcache.version>2.3.1</net.sf.ehcache.version>
</properties>
Maven 2.21
con mucho gusto dar más información si es necesario. Como dije, cada ayuda apreciada.
¿Necesita tejer el tiempo de carga para la prueba de integración? – sourcedelica
Buscando en Google parece que MAVEN_OPTS es el camino a seguir y debe asegurarse de que no haya espacios en su camino hacia el contenedor. – sourcedelica
Como escribí, hice google mucho y también encontré MAVEN_OPTS, sin embargo, ninguna solución funcionó, no había espacios en el camino. – hjuskewycz