среда, 17 февраля 2016 г.

Jersey test util features

Jersey предлагает неплохие тулзы для тестирования.
Единственное что они подымают реальный контейнер для запуска сервлеты сервера
org.glassfish.jersey.test.grizzly.GrizzlyTestContainerFactory$GrizzlyTestContainer
что занимает определенное время... Но это можно пережить.

Необходимы классы вот:
import javax.ws.rs.client.Entity;
import javax.ws.rs.core.Application;
import javax.ws.rs.core.Form;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.server.spring.SpringLifecycleListener;
import org.glassfish.jersey.test.JerseyTest;

Первая група это просто классы для работы с JAX-RS по спецификации.
А вот вторая уже стыковка со спрингом(если он у нас для поддержания контекста зависимостей) и уже JerseyTest класс, который мы расширяем для магии
public class MyRestResourceTest extends JerseyTest {

    @Override
    protected Application configure() {
   ResourceConfig appConfig = new ResourceConfig(MyRestResource.class);
   appConfig.register(SpringLifecycleListener.class);
   appConfig.property("contextConfigLocation", "file:src/main/webapp/WEB-INF/spring/root-context.xml");
   return appConfig;
    }
    
    @Test
    ........
}
Расширение этого класса позврояет нам пользоваться методом, который дарует возможность запросов на сервер:
public class MyRestResourceTest extends JerseyTest {
    ........
    
    @Test
    public void testSomeGet() throws Exception {
        final Response resp = target().path("/somepath")
    .request(javax.ws.rs.core.MediaType.APPLICATION_JSON)
                                .get();
        assertThat(resp.getStatus(), is(200));
        String someJsonForParsing = response.readEntity(String.class);
        ...        
    }
    ........
}
Ну и чего-нибудь отправим:
public class MyRestResourceTest extends JerseyTest {
    ........
    
    @Test
    public void testSomePost() throws Exception {
        Form form = new Form() ;
        form.param("param1", "value");
        final Response resp = target("path/for/post").request(javax.ws.rs.core.MediaType.APPLICATION_JSON)
          .post(Entity.entity(form, "application/x-www-form-urlencoded"));
        assertThat(resp.getStatus(), is(200));
        String someJsonForParsing = response.readEntity(String.class);
        ...        
    }
    ........
}

Комментариев нет:

Отправить комментарий