使用Jersey测试框架的Rest Web Services的单元测试用例

时间:2019-07-03 04:48:07

标签: java web-services junit jersey-test-framework

我试图使用Jersey测试框架来测试Rest Web服务,因为我需要在不运行tomcat服务器的情况下对其进行测试。我在执行此操作时遇到了一些问题。我尝试了几种方法,但没有任何帮助。

这是我尝试的方式。

方法1:

    private static URI uri = UriBuilder.fromUri("http://localhost/").port(1010).build();
    private static Client client = ClientBuilder.newClient();

    @BeforeClass
    public static void initServer() throws IOException {
        server = HttpServer.create(new InetSocketAddress(uri.getPort()), 0);
        HttpHandler handler = RuntimeDelegate.getInstance().createEndpoint(new JerseyConfiguration(),
                                                                            HttpHandler.class);
        server.createContext(uri.getPath(), handler);
        server.start();
    }

    @Test
    public void testGetMessage() {
        Response response = client.target("http://localhost:1010/webservicePath").request()
                .accept(MediaType.APPLICATION_JSON).get();
        System.out.println("Response : " + response);
        assertEquals(200, response.getStatus());
        server.stop(0);
    }

        public JerseyConfiguration(Class<?>... classes) {
       register(new AbstractBinder() {
           @Override
           protected void configure() {
        bind(InterfaceClass.class).to(ImplementationClass.class);
           }
       });
   }
    } 

在这种方法下,我无法创建端点。创建端点时遇到问题。

java.lang.IllegalArgumentException
 at org.apache.cxf.jaxrs.impl.RuntimeDelegateImpl.createEndpoint(RuntimeDelegateImpl.java:111)

方法2:

static final String BASE_URI = "http://localhost:9080/basePath";
    static HttpServer server;
    static Client client;

    private static org.glassfish.grizzly.http.server.HttpServer 
         startServer() {
        final ResourceConfig resourceConfig =  new ResourceConfig()
                .register(JerseyConfiguration.class);
        return 
  GrizzlyHttpServerFactory.createHttpServer(URI.create(BASE_URI),resourceConfig);
    }

    @BeforeClass
    public static void setUpClass() {
        server = startServer();
        client = ClientBuilder.newClient();
    }

    @AfterClass
    public static void tearDownClass() {
        server.shutdown();
    }

    @Test
    public void test() {
        WebTarget target = client.target(BASE_URI);
        Response response = target.path("/webservicePath").request().post(Entity.text(""));
        assertEquals(200, response.getStatus());
        response.close();
    }

此方法显示404-找不到错误。

有人可以帮我解决这个问题吗? 如果没有其他方法可以在不运行tomcat服务器的情况下测试Web服务,请提出建议。

注意:我的Web服务结构如下

@WebService
@Produces("application/json")
@Consumes("application/json")
@Path("/api")
@Service
public interface WebServiceInterface {
//abstract methods
}

和实现类如下:

@Service
@org.apache.cxf.interceptor.OutFaultInterceptors(
   interceptors = { "service.soap.HttpStatusInterceptor" })
@WebService(endpointInterface = "end.point.path")
public class WebServiceImpl implements WebServiceInterface {
}

0 个答案:

没有答案