2009-05-26 6 views
7

У меня есть веб-служба JAX-RS, реализованная с помощью библиотеки Restlet, и теперь я хочу ее протестировать. Чтобы сделать это, я хотел бы разместить эту службу в своем тесте, предварительно инициализируя ее с издеваемыми услугами.Каков наилучший способ написать тестовый пример для веб-служб RESTLET?

Каков наилучший способ размещения такого сервиса и выполнения тестовых вызовов?

@Path("/srv") 
public class MyService 
{ 
    @GET 
    public void action(@Context UriInfo uri) 
    { ... } 
} 

@Test 
public void myTest() 
{ 
    MyService service = new MyService(); 
    service.setSomething(...); 

    // How do I host it? 

    // How do I call it? 
} 

ответ

0

Restlet позволяет запускать веб-сервисы на различных «коннекторов» сервера, и это довольно легко переключаться с одного сервера на другой. Обычно мы запускаем наши веб-сервисы на кластере серверов приложений Java Sun EOS Sun Glassfish, но для их тестирования мы используем соединитель, который связывается с Simple HTTP Server для запуска веб-сервисов как отдельного приложения. Существуют также серверные коннекторы для AsyncWeb, Jetty, Grizzly и внутреннего HTTP-сервера.

На стороне клиента вы должны рассмотреть библиотеку клиентов Restlet. Это довольно лаконично, и он разработан, чтобы хорошо сочетаться с серверами Restlet. Мы используем соединитель HTTP-клиента Apache.

Для тестирования мы создали класс Fetcher. Это реализовано с использованием API-интерфейса Restlet. Для того, чтобы использовать его, вы в значительной степени вызвать метод выборки():

DTO person = fetch("/employee/1234"); 
DTO department = fetch("/department/" + person.getDepartment()); 

Fetch() Гвозди данное имя ресурса на базе URI из веб-сервисов (скажем, «http://localhost:8182»), использует клиентский API Restlet к получить представление XML, а затем десериализовать извлеченный XML в объект передачи данных (POJO).

Вы можете видеть, что это действительно упрощает модульное тестирование. Перед тестированием модуля вы запускаете веб-службы на автономном сервере, таком как Simple или Jetty. Во время модульных тестов вы получаете DTO, DOM-деревья, объекты json.org или что-то еще, используя Fetcher, затем применяйте утверждения теста к тому, что было возвращено. Если вам нужно протестировать более подробный уровень, вы можете напрямую использовать код клиента Restlet.

+1

Весь смысл моего вопроса состоял в том, чтобы выяснить, как инициализировать веб-службу/компонент INSIDE. Я не хочу/не могу запустить его на удаленном сервере. Необходимо инициализировать службу с помощью издевающихся экземпляров, прежде чем она будет показана как веб-служба. Есть ли способ открыть INSTANCE класса/компонента как службы? – IgorM

+0

любые ответы? IgorM - ты справился? – Vatsala