Pergunta

Usando RestLet, criei um roteador para o meu aplicativo Java.

Ao usar o CURL, sei que cada uma das diferentes solicitações de GET, Publicar e excluir funcionar para cada um dos URIs e devolver a resposta correta do JSON.

Estou querendo configurar testes JUNIT para cada um dos URI para facilitar o processo de teste. No entanto, não tenho certeza de que a melhor maneira de fazer a solicitação para cada um dos URIs para obter a resposta do JSON que eu possa comparar para garantir que os resultados sejam os esperados. Alguma ideia de como fazer isso?

Foi útil?

Solução

Você poderia apenas usar um Restlet Client Para fazer solicitações, verifique cada resposta e sua representação.

Por exemplo:

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");

Na verdade, não estou tão familiarizado com Junit, assert, ou testes de unidade em geral, por isso peço desculpas se há algo errado com o meu exemplo. Espero que ainda ilustra uma possível abordagem para testar.

Boa sorte!

Outras dicas

Teste de unidade a 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);

onde o router E o recurso é @Autowired na minha aula de teste. As declarações relevantes no contexto da aplicação da primavera parecem

<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" />

E a myApplication é similar a

public class MyApplication extends Application {
}

Recebi a resposta para configurações de resposta de desafio no caso de teste de 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());
}

Com base no Resposta do linho Avi Reescrevo este código para Java e o executei com Junitparams, uma biblioteca que permite passar testes parametrizados. O código se parece:

@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());

    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top