Запуск тестов JUnit на Restlet-маршрутизаторе

Используя Restlet, я создал маршрутизатор для своего Java-приложения.

Из использования curl я знаю, что каждый из разных запросов GET, POST и DELETE работает для каждого из URI и возвращает правильный ответ JSON.

Я хочу настроить тесты JUnit для каждого из URI, чтобы упростить процесс тестирования. Однако я не уверен, что это лучший способ сделать запрос к каждому из URI, чтобы получить ответ JSON, который я затем могу сравнить, чтобы убедиться, что результаты соответствуют ожиданиям. Любые мысли о том, как это сделать?


person Lee    schedule 22.02.2010    source источник


Ответы (4)


Вы можете просто использовать Restlet Client, чтобы сделать запросы, затем проверьте каждый ответ и его представление.

Например:

Client client = new Client(Protocol.HTTP);
Request request = new Request(Method.GET, resourceRef);
Response response = client.handle(request);

assert response.getStatus().getCode() == 200;
assert response.isEntityAvailable();
assert response.getEntity().getMediaType().equals(MediaType.TEXT_HTML);

// Representation.getText() empties the InputStream, so we need to store the text in a variable
String text = response.getEntity().getText();
assert text.contains("search string");
assert text.contains("another search string");

На самом деле я не так хорошо знаком с JUnit, assert или модульным тестированием в целом, поэтому прошу прощения, если что-то не так с моим примером. Надеюсь, он по-прежнему иллюстрирует возможный подход к тестированию.

Удачи!

person Avi Flax    schedule 24.02.2010
comment
Это было здорово. С assert это assertTrue(...) для всех, кто использует пример, но кроме этого он идеален. Спасибо - person Lee; 25.02.2010
comment
С удовольствием, рад помочь! Кстати, я рекомендую вам попробовать Groovy для таких вещей — это делает тесты более краткими. Особенно здорово, что у него есть ярлыки геттера и сеттера, а == означает равенство значений. Поэтому вместо response.getEntity().getMediaType().equals(MediaType.TEXT_HTML) вы можете написать response.entity.mediaType == MediaType.TEXT_HTML. ХТХ! - person Avi Flax; 25.02.2010

Модульное тестирование ServerResource

// Code under test
public class MyServerResource extends ServerResource {
  @Get
  public String getResource() {
    // ......
  }
}

// Test code
@Autowired
private SpringBeanRouter router;
@Autowired
private MyServerResource myServerResource;

String resourceUri = "/project/1234";
Request request = new Request(Method.GET, resourceUri);
Response response = new Response(request);
router.handle(request, response);
assertEquals(200, response.getStatus().getCode());
assertTrue(response.isEntityAvailable());
assertEquals(MediaType.TEXT_PLAIN, response.getEntity().getMediaType());
String responseString = response.getEntityAsText();
assertNotNull(responseString);

где router и ресурс @Autowired в моем тестовом классе. Соответствующие объявления в контексте приложения Spring выглядят так:

<bean name="router" class="org.restlet.ext.spring.SpringBeanRouter" />
<bean id="myApplication" class="com.example.MyApplication">
  <property name="root" ref="router" />
</bean> 
<bean name="/project/{project_id}" 
      class="com.example.MyServerResource" scope="prototype" autowire="byName" />

И myApplication похож на

public class MyApplication extends Application {
}
person user799188    schedule 02.07.2012

Я получил ответ для настроек ответа на вызов в тестовом примере REST junit.

@Test
public void test() {
    String url ="http://localhost:8190/project/user/status";
    Client client = new Client(Protocol.HTTP);
    ChallengeResponse challengeResponse = new ChallengeResponse(ChallengeScheme.HTTP_BASIC,"user", "f399b0a660f684b2c5a6b4c054f22d89");
    Request request = new Request(Method.GET, url);
    request.setChallengeResponse(challengeResponse);
    Response response = client.handle(request);
    System.out.println("request"+response.getStatus().getCode());
    System.out.println("request test::"+response.getEntityAsText());
}
person Aravind Cheekkallur    schedule 11.03.2014

Основываясь на ответе Ави Флакса, я переписываю этот код на java и запускаю его с помощью junitparams — библиотека, которая позволяет проходить параметризованные тесты. Код выглядит так:

@RunWith(JUnitParamsRunner.class)
public class RestServicesAreUpTest {

    @Test
    @Parameters({
        "http://url:port/path/api/rest/1, 200, true",
        "http://url:port/path/api/rest/2, 200, true", })
    public void restServicesAreUp(String uri, int responseCode,
        boolean responseAvaliable) {
    Client client = new Client(Protocol.HTTP);
    Request request = new Request(Method.GET, uri);
    Response response = client.handle(request);

    assertEquals(responseCode, response.getStatus().getCode());
    assertEquals(responseAvaliable, response.isEntityAvailable());
    assertEquals(MediaType.APPLICATION_JSON, response.getEntity()
        .getMediaType());

    }
}
person Francisco Puga    schedule 27.12.2012