我想用HTTP請求測試我們的REST服務(有點黑盒測試)。然而,經過幾個小時的谷歌搜索和嘗試不同的配置,我仍然無法正確啓動Jetty。這裏是我當前的配置(我試過多個不同版本):使用Spring/Jetty(或Tomcat)/ Maven進行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" />
現在,我得到異常:
- java.lang.IllegalStateException:ClassLoader [org.mortbay.jetty.webapp.WebAppClassLoader]不提供'addTransformer(Class FileTransformer)'方法。指定自定義的LoadTimeWeaver或使用Spring的代理啓動Java虛擬機:-javaagent:org.springframework.instrument.jar
我明白了異常,但我沒能解決它。我還嘗試了其他兩種方法,例如通過MAVEN_OPTS提供javaagent或嘗試將VM參數設置爲Jetty。問題是Google爲不同的版本回饋了一堆「解決方案」,而且沒有一個能夠發揮作用。
我目前相當沮喪,像做REST服務測試這樣的常見場景,在Spring中很難實現。所以,如果你足夠聰明,找到合適的配置,請以一種即使是猴子可以配置它的方式與我分享,我保證如果我們見過啤酒在我身上。
下面是我用的版本:
<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
如果需要,我高興地提供更多的信息。就像我說的每一個幫助讚賞。
您是否需要加載時間編織進行集成測試? – sourcedelica 2011-04-04 13:47:50
谷歌搜索似乎像MAVEN_OPTS是要走的路,你需要確保你的路徑中沒有空間的jar。 – sourcedelica 2011-04-04 14:05:40
就像我寫的,我做了很多谷歌,我也發現MAVEN_OPTS,但是,沒有解決方案的工作,路徑中沒有空格。 – hjuskewycz 2011-04-05 08:13:44