unit-testing - testonly - scalatest play framework
Prueba la respuesta HTTP con PlayFramework/JUnit (1)
Utilizo la biblioteca de WS (servicios web) de Play para lograr esto. Por ejemplo:
package endpoints;
import com.fasterxml.jackson.databind.JsonNode;
import models.Meh;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import play.libs.Json;
import play.libs.ws.WS;
import play.libs.ws.WSResponse;
import play.test.TestServer;
import static org.fest.assertions.Assertions.assertThat;
import static play.test.Helpers.*;
public class MehEndpointTest {
private static long timeout;
private static Meh meh1;
private static Meh meh2;
// Test Server
private static TestServer testServer = testServer(3333, fakeApplication(inMemoryDatabase()));
private static JsonNode meh1Node;
private static JsonNode meh2Node;
@BeforeClass
public static void setUp() {
timeout = 10000L;
// Dummy Objects
meh1 = new Meh();
meh1.meh = "foo";
meh1.yo = "bar";
meh2 = new Meh();
meh2.meh = "hell";
meh2.yo = "world";
meh1Node = Json.toJson(meh1);
meh2Node = Json.toJson(meh2);
// Start the server
start(testServer);
}
@Test
public void testAdd() {
WSResponse wsResponse1 = WS.url("http://localhost:3333/api/meh").post(meh1Node).get(timeout);
WSResponse wsResponse2 = WS.url("http://localhost:3333/api/meh").post(meh2Node).get(timeout);
JsonNode jsonNode1 = wsResponse1.asJson();
JsonNode jsonNode2 = wsResponse2.asJson();
assertThat(wsResponse1.getStatus()).isEqualTo(CREATED);
assertThat(wsResponse2.getStatus()).isEqualTo(CREATED);
assertThat(jsonNode1.isObject()).isEqualTo(true);
assertThat(jsonNode1.get("id").asLong()).isEqualTo(1L);
assertThat(jsonNode2.isObject()).isEqualTo(true);
assertThat(jsonNode2.get("id").asLong()).isEqualTo(2L);
}
@Test
public void testFind() {
WSResponse wsResponse1 = WS.url("http://localhost:3333/api/meh").get().get(timeout);
WSResponse wsResponse2 = WS.url("http://localhost:3333/api/meh/2").get().get(timeout);
JsonNode jsonNode1 = wsResponse1.asJson();
JsonNode jsonNode2 = wsResponse2.asJson();
assertThat(wsResponse1.getStatus()).isEqualTo(OK);
assertThat(wsResponse2.getStatus()).isEqualTo(OK);
assertThat(jsonNode1.isArray()).isEqualTo(true);
assertThat(jsonNode2.isObject()).isEqualTo(true);
assertThat(jsonNode1).hasSize(2);
assertThat(jsonNode2.get("id").asLong()).isEqualTo(2);
}
@Test
public void testUpdate() {
meh1.id = 1L;
meh1.yo = "changed yo";
WSResponse wsResponse1 = WS.url("http://localhost:3333/api/meh/1").put(Json.toJson(meh1)).get(timeout);
JsonNode jsonNode1 = wsResponse1.asJson();
assertThat(wsResponse1.getStatus()).isEqualTo(OK);
assertThat(jsonNode1.isObject()).isEqualTo(true);
assertThat(jsonNode1.get("id").asLong()).isEqualTo(1);
assertThat(jsonNode1.get("yo").asText()).isEqualTo("changed yo");
}
@Test
public void testDelete() {
WSResponse wsResponse1 = WS.url("http://localhost:3333/api/meh").post(meh1Node).get(timeout);
WSResponse wsResponse2 = WS.url("http://localhost:3333/api/meh/3").delete().get(timeout);
WSResponse wsResponse3 = WS.url("http://localhost:3333/api/meh").get().get(timeout);
JsonNode jsonNode1 = wsResponse3.asJson();
assertThat(wsResponse1.getStatus()).isEqualTo(CREATED);
assertThat(wsResponse2.getStatus()).isEqualTo(OK);
assertThat(wsResponse3.getStatus()).isEqualTo(OK);
assertThat(jsonNode1).hasSize(2);
}
@AfterClass
public static void tearDown() {
// Stop the server
stop(testServer);
}
}
Observe las llamadas a assertThat(wsResponse1.getStatus()).isEqualTo(OK);
Espero que ayude. Deja un comentario si necesitas más aclaraciones.
He estado buscando horas para encontrar una forma de comprobar si una ruta es correcta con el juego.
Quiero decir, por ejemplo
¿La solicitud GET a
localhost:9000/test
realmente devuelve200 OK
?
No pude encontrar ningún ejemplo de trabajo.