我会修复的几件事:
你正在使用Jersey 1.x风味的Jersey测试框架,但你的应用程序是Jersey2.x。请参阅下面的2.x依赖性。
我从未使用过Jersey 1.x风格的测试框架,但对于Jersey 2.x,内存中容器不支持servlet依赖功能。有关不同的依赖性,请参见下文。
使用Jersey测试框架,你无需创建
Client
自己。创建了一个,我们可以简单地调用JerseyTest
的target(String path)
方法来取回WebTarget
(Jersey 2.x,WebResource
是Jersey 1.x
)。
这是一个有效的重构。
依赖关系(我仅添加了此依赖关系,并且没有删除任何东西,因为你的GitHub项目没有包含与测试相关的任何东西,如你上面的代码示例所述)
<dependency> <groupId>org.glassfish.jersey.test-framework.providers</groupId> <artifactId>jersey-test-framework-provider-grizzly2</artifactId> <version>2.15</version></dependency>
测试
import com.component.ResourceRegister;import org.glassfish.jersey.servlet.ServletContainer;import org.glassfish.jersey.test.DeploymentContext;import org.glassfish.jersey.test.JerseyTest;import org.glassfish.jersey.test.ServletDeploymentContext;import org.glassfish.jersey.test.grizzly.GrizzlyWebTestContainerFactory;import org.glassfish.jersey.test.spi.TestContainerFactory;import org.junit.Assert;import org.junit.Test;import org.springframework.web.context.ContextLoaderListener;public class SpringTest extends JerseyTest { @Override protected TestContainerFactory getTestContainerFactory() { return new GrizzlyWebTestContainerFactory(); } @Override protected DeploymentContext configureDeployment(){ return ServletDeploymentContext .forServlet(new ServletContainer(new ResourceRegister())) .addListener(ContextLoaderListener.class) .contextParam("contextConfigLocation", "classpath:applicationContext.xml") .build(); } @Test public void test() { String response = target("test").request().get(String.class); Assert.assertEquals("Hello", response); System.out.println(response); } }对于那些不使用xml上下文文件的用户,可以使用注释配置应用程序上下文,并将其添加为init参数。
return ServletDeploymentContext .forServlet(new ServletContainer(new ResourceRegister())) .addListener(ContextLoaderListener.class) .initParam("contextConfig", new AnnotationConfigApplicationContext(YourSpringConfig.class)) .build();


