Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 使用PlayFramework/JUnit测试HTTP响应_Unit Testing_Junit_Playframework_Playframework 2.2_Playframework 2.3 - Fatal编程技术网

Unit testing 使用PlayFramework/JUnit测试HTTP响应

Unit testing 使用PlayFramework/JUnit测试HTTP响应,unit-testing,junit,playframework,playframework-2.2,playframework-2.3,Unit Testing,Junit,Playframework,Playframework 2.2,Playframework 2.3,我已经找了几个小时,想找到一种方法来测试一条路线是否正确 我的意思是,例如 对localhost:9000/test的GET请求是否实际返回200 OK 我找不到任何有效的例子 我使用Play的WS(Web服务)库来实现这一点。例如: package endpoints; import com.fasterxml.jackson.databind.JsonNode; import models.Meh; import org.junit.AfterClass; import org.junit

我已经找了几个小时,想找到一种方法来测试一条路线是否正确
我的意思是,例如

localhost:9000/test
的GET请求是否实际返回
200 OK

我找不到任何有效的例子

我使用Play的WS(Web服务)库来实现这一点。例如:

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);
    }
}
注意对
assertThat(wsResponse1.getStatus()).isEqualTo(OK)的调用


希望有帮助。如果需要进一步澄清,请留下评论。

Wow。非常非常感谢。只想知道一件事:我的服务器实际上运行在localhost:9000上(所以Ws.url(“)。testServer第一个参数中的3333是什么?它是假应用程序/服务器将使用的端口号,因此如果您愿意,可以将其更改为9000。但是,如果您需要在测试的同时运行应用程序,那么当然您需要使其不同,以避免使用“地址”"错误。因此,我不需要运行localhost:9000服务器来执行测试?不,无论端口号如何,路由都将保持不变。因此,如果在常规应用程序中有一个路由
localhost:9000/test
,则测试服务器中有一个相应的路由,名为
localhost:3333/test
power。Thak的f或者所有的帮助!