Выполнение тестов JUnit на маршрутизаторе перезапуска - PullRequest
5 голосов
/ 22 февраля 2010

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

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

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

Ответы [ 4 ]

7 голосов
/ 24 февраля 2010

Вы можете просто использовать 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 или модульным тестированием в целом, поэтому прошу прощения, если что-то не так с моим примером. Надеюсь, это все еще иллюстрирует возможный подход к тестированию.

Удачи!

3 голосов
/ 02 июля 2012

Модульное тестирование 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 {
}
1 голос
/ 11 марта 2014

Я получил ответ для настроек ответа на запрос в тестовом наборе 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());
}
0 голосов
/ 27 декабря 2012

Основываясь на ответе Avi Flax , я переписываю этот код в 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());

    }
}
...