2015-01-26 314 views
0

我试图在RESTful应用程序上测试一些服务,但是我找不到我缺少什么依赖项以便正确执行JerseyTest。我使用maven所以POM文件如下:JerseyTest缺少依赖关系com.google.common.collect.Sets

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>PizzaApp</groupId> 
    <artifactId>PizzaApp</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>war</packaging> 

    <dependencies> 
     <dependency> 
      <groupId>javax</groupId> 
      <artifactId>javaee-api</artifactId> 
      <version>7.0</version> 
     </dependency> 

     <dependency> 
      <groupId>javax</groupId> 
      <artifactId>javaee-web-api</artifactId> 
      <version>7.0</version> 
     </dependency> 

     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-core</artifactId> 
      <version>4.3.5.Final</version> 
     </dependency> 

     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-entitymanager</artifactId> 
      <version>4.3.5.Final</version> 
     </dependency> 

     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-spatial</artifactId> 
      <version>4.3</version> 
     </dependency> 

     <dependency> 
      <groupId>com.sun.jersey</groupId> 
      <artifactId>jersey-json</artifactId> 
      <version>1.18.3</version> 
     </dependency> 

     <!-- Test API ======================================== --> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.12</version> 
     </dependency> 

     <dependency> 
      <groupId>org.glassfish.jersey.core</groupId> 
      <artifactId>jersey-server</artifactId> 
      <version>2.14</version> 
      <scope>provided</scope> 
     </dependency> 

     <dependency> 
      <groupId>org.glassfish.jersey.test-framework.providers</groupId> 
      <artifactId>jersey-test-framework-provider-grizzly2</artifactId> 
      <version>2.15</version> 
      <scope>test</scope> 
     </dependency> 

     <dependency> 
      <groupId>com.google.guava</groupId> 
      <artifactId>guava</artifactId> 
      <version>18.0</version> 
      <scope>test</scope> 
     </dependency> 


    </dependencies> 

    <repositories> 
     <repository> 
      <id>OSGEO GeoTools repo</id> 
      <url>http://download.osgeo.org/webdav/geotools</url> 
     </repository> 
     <repository> 
      <id>Hibernate Spatial repo</id> 
      <url>http://www.hibernatespatial.org/repository</url> 
     </repository> 
    </repositories> 

    <build> 
     <finalName>PizzaApp</finalName> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-war-plugin</artifactId> 
       <version>2.5</version> 
      </plugin> 
     </plugins> 
    </build> 


</project> 

我部署在GlassFish应用和使用PostgreSQL trought与空间扩展冬眠。如果我部署应用程序,一切正常,只有我无法运行的测试。

- 编辑 -

一个简单的测试类如下:

public class PizzeriaServiceControllerTest extends JerseyTest { 

    @Override 
    public Application configure() { 
     ResourceConfig resource = new ResourceConfig(PizzeriaController.class); 
     return resource; 
    } 

    @Test 
    public void testAll() throws Exception { 
     String pizzarias = target("pizzeria/all").request().get(String.class); 
     assertEquals("[]", pizzarias); 
    } 
} 

运行测试时,我得到的错误是:

java.lang.NoSuchMethodError: org.glassfish.jersey.server.ApplicationHandler.<init>(Ljavax/ws/rs/core/Application;Lorg/glassfish/hk2/utilities/Binder;)V 
    at org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpContainer.<init>(GrizzlyHttpContainer.java:331) 
    at org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpServerFactory.createHttpServer(GrizzlyHttpServerFactory.java:141) 
    at org.glassfish.jersey.test.grizzly.GrizzlyTestContainerFactory$GrizzlyTestContainer.<init>(GrizzlyTestContainerFactory.java:82) 
    at org.glassfish.jersey.test.grizzly.GrizzlyTestContainerFactory$GrizzlyTestContainer.<init>(GrizzlyTestContainerFactory.java:66) 
    at org.glassfish.jersey.test.grizzly.GrizzlyTestContainerFactory.create(GrizzlyTestContainerFactory.java:130) 
    at org.glassfish.jersey.test.JerseyTest.createTestContainer(JerseyTest.java:277) 
    at org.glassfish.jersey.test.JerseyTest.setUp(JerseyTest.java:609) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
+1

当您尝试运行JerseyTest类时没有找到类吗?你可以发布样本单元测试吗? – 2015-01-26 23:30:45

+0

@ChrisHinshaw我用请求信息编辑了问题 – tutomso 2015-02-05 11:50:21

回答

2

最好查看层次结构中所需的依赖关系的方法是运行mvn dependency:tree。这将列出您的项目所需的依赖关系。这在pom编辑器的eclipse中也是可用的。您应该对Google集合有依赖性。您可以追踪哪个软件包具有此依赖关系。我敢打赌,这是球衣番石榴所必需的。如果你不需要它,你可以删除它。

或者,您可以添加google收藏。

<dependency> 
    <groupId>com.google.collections</groupId> 
    <artifactId>google-collections</artifactId> 
    <version>1.0</version> 
</dependency> 
+0

我正在使用依赖jersey-guava。我从com.google版本18.0更改为番石榴。这解决了一个缺少类错误,但我仍然有问题来运行测试。我在问题中添加了错误。 – tutomso 2015-02-05 11:53:30