Mock-Server - 自定义对象作为 REST 响应

Mock-Server - Custom object as REST response

我在 5.10.0 版中使用 Mock-Server (mock-server.com) 在 JUnit 5 测试中模拟 REST-API。我正在使用 Java 8 开发一个 spring-boot 应用程序。我的有效负载格式是 "protobuf",所以我的 REST 接口是 returning a ResponseEntity<MyProtoObject>。不幸的是,我在 Mock-Server 中找不到自定义对象被 Mock-Server 作为主体 returned 的内置解决方案。我只找到了像 withBody(String)withBody(byte[]) 这样的方法。除了这些方法,我还找到了一个方法 withBody(BodyWithContentType)。我试图在我的单元测试 class:

中创建摘要 class BodyWithContent<T> 的以下 implementation/usage
private final class MyProtoObjectPayloadBody extends BodyWithContentType<MyProtoObject> {

    public MyProtoObjectPayloadBody () {
        super(null, null);
    }

    @Override
    public MyProtoObject getValue() {
        // return logic of MyProtoObject
    }
}

// Called in @BeforeEach
private void prepareMock() {

    this.mockServer.when(HttpRequest.request().withMethod("GET").withPath("/my-path"))
                .respond(HttpResponse.response().withStatusCode(200).withBody(new MyProtoObjectPayloadBody ()).withDelay(TimeUnit.SECONDS, 5));
}

当我调试出现 ResponseEntity 的代码时,我从模拟服务器获得响应,但响应的 "body" 始终为空。我的习惯 getValue() 也从未被调用。我确保我的应用程序逻辑中的 REST 调用结果来自使用不同 return 代码的模拟服务器。

有人可以帮我解决这个问题吗?

不幸的是,我通过 Slack 收到了模拟服务器开发人员的回复,说无法 return 自定义对象。模拟服务器不清楚它们应该如何(反)序列化。所以我会尝试通过 byte[]

使用变通方法

您可以return json 将您的对象响应为

mockServer.expect(ExpectedCount.once(),
                  MockRestRequestMatchers.requestTo(<URL>))
            .andRespond(MockRestResponseCreators.withSuccess(
                <json-response>, MediaType.APPLICATION_JSON))