Как лучше всего написать тестовый пример для веб-сервисов RESTLET?

У меня есть веб-служба JAX-RS, реализованная с библиотекой 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?
}

person Community    schedule 26.05.2009    source источник


Ответы (2)



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

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

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

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.

person Community    schedule 04.06.2009
comment
Весь смысл моего вопроса заключался в том, чтобы выяснить, как инициализировать веб-службу/компонент ВНУТРИ процесса. Я не хочу/не могу запускать его на удаленном сервере. Необходимо инициализировать службу с помощью фиктивных экземпляров ДО того, как она будет представлена ​​как веб-служба. Есть ли способ представить ЭКЗЕМПЛЯР класса/компонента как услугу? - person IgorM; 08.07.2009