Модульный тестовый пример для веб-сервисов Rest, использующих среду тестирования Джерси - PullRequest
0 голосов
/ 03 июля 2019

Я пытаюсь протестировать веб-сервисы Rest, используя среду тестирования Джерси, потому что мне нужно протестировать ее без запуска сервера 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.

ПРИМЕЧАНИЕ. Моя структура веб-службы выглядит следующим образом

@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 {
}
...