我如何在 Ballerina 中对 HTTP 服务进行单元测试?

How can I unit test an HTTP service in Ballerina?

假设我有一个用 Ballerina 编写的 echo HTTP 服务,如下所示:

import ballerina/http;

service / on new http:Listener(9090) {

    resource function post echo(@http:Payload json payload) returns json {
        return payload;
    }
}

如何编写单元测试 echo 资源方法的行为?

您可以使用 Ballerina HTTP 客户端为 HTTP 服务编写单元测试。

将测试放在 Ballerina 项目的 tests 目录中。

以下是示例测试:

import ballerina/http;
import ballerina/test;

@test:Config {}
function testService() returns error? {
    http:Client httpClient = check new("http://localhost:9090");
    json requestPayload = {message: "hello"};
    http:Request request = new;
    request.setPayload(requestPayload);
    json responsePayload = check httpClient->post("/echo", request);
    test:assertEquals(responsePayload, requestPayload);
}

在这里,我们发送一个有效负载并使用 HTTP 客户端将其取回,然后检查回显服务是否发送回相同的有效负载。

当运行进行测试时,该服务将自动启动。您不必手动 运行 它们。