Frage

Mit Restlet ich einen Router für meine Java-Anwendung erstellt haben.

Von curl verwenden, weiß ich, dass jeder der verschiedenen GET, POST und DELETE-Anforderungen für jede der URIs arbeiten und die richtige JSON-Antwort zurück.

Ich bin zu wollen, um Set-up JUnit-Tests für jede der URI des Testprozess zu erleichtern. Allerdings bin ich nicht der beste Weg sicher die Anforderung an jeden der URIs zu machen, um die JSON-Antwort zu bekommen, die ich dann vergleichen, um sicherzustellen, werden die Ergebnisse wie erwartet. Irgendwelche Gedanken darüber, wie dies zu tun?

War es hilfreich?

Lösung

Sie können nur verwenden Restlet Client auf Anfragen machen, dann jede Antwort und seine Darstellung überprüfen.

Zum Beispiel:

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

Ich bin eigentlich nicht so vertraut mit JUnit, assert oder Einheit im allgemeinen Prüfung, so dass ich entschuldige mich, wenn es etwas gibt, weg mit meinem Beispiel. Hoffentlich zeigt noch einen möglichen Ansatz zur Prüfung.

Viel Glück!

Andere Tipps

Unit-Tests ein 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);

, wo die router und die Ressource in meiner Testklasse @Autowired sind. Die entsprechenden Erklärungen im Frühjahr Anwendungskontext sieht aus wie

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

Und der myApplication ähnelt

public class MyApplication extends Application {
}

Ich habe die Antwort für Challenge-Response-Einstellungen in REST JUnit-Testfall

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

Basierend auf der Antwort von Avi Flax ich diesen Code zu Java neu schreiben und es mit junitparams , eine Bibliothek, die parametrisiert Tests bestehen können. Der Code sieht wie:

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

    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top