2010-02-22 4 views
4

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

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

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

+0

Я имел подобный вопрос http://stackoverflow.com/questions/2165561/ways- to-test-restful-services. rest-client должен работать неплохо для вашего сценария. – Daff

+0

Это близко, но не совсем то, что мне нужно. Было бы неплохо, если бы я мог настроить тестовые сюиты и т. Д. Также приводит к проблеме всех членов команды, которые должны иметь доступ к этому пользовательскому интерфейсу. – Lee

ответ

6

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

Удачи вам!

+0

Это было здорово. С assert это assertTrue (...) для любого другого, использующего пример, но отлично от этого. Спасибо – Lee

+0

Мое удовольствие, рад помочь! BTW Я рекомендую вам попробовать Groovy для такого рода вещей - это делает тесты более краткими. Особенно замечательно, что у него есть ярлыки getter и setter, а == означает равенство значений. Так что вместо response.getEntity(). GetMediaType(). Equals (MediaType.TEXT_HTML) вы можете написать response.entity.mediaType == MediaType.TEXT_HTML. HTH! –

3

Модульное тестирование 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 { 
} 
0

На основе answer of 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()); 

    } 
} 
+0

Как я могу добавить запрос запроса в junit? –

1

Я получил ответ на настройки ответа вызова в 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()); 
} 
Смежные вопросы