1

我在 5.10.0 版本中使用 Mock-Server (mock-server.com) 在 JUnit 5 测试中模拟 REST-API。我正在使用 Java 8 开发一个 spring-boot 应用程序。我的有效负载格式是“protobuf”,所以我的 REST 接口返回一个ResponseEntity<MyProtoObject>. 不幸的是,我在 Mock-Server 中找不到自定义对象作为主体返回的 Mock-Server 内置解决方案。我只找到了withBody(String)or之类的方法withBody(byte[])。除了这些方法,我还找到了一种方法withBody(BodyWithContentType)。我试图BodyWithContent<T>在我的单元测试类中创建抽象类的以下实现/用法:

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 的代码时,我从模拟服务器获得响应,但响应的“主体”始终为空。我的习惯getValue()也从来没有被调用过。我确保我的应用程序逻辑中的 REST 调用结果来自使用不同返回码的模拟服务器。

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

4

2 回答 2

0

不幸的是,我通过 Slack 得到了模拟服务器开发人员的回复,即无法返回自定义对象。模拟服务器不清楚它们应该如何(反)序列化。所以我将尝试通过 byte[] 使用解决方法

于 2020-04-10T18:13:07.000 回答
0

您可以将对象的 json 响应返回为

mockServer.expect(ExpectedCount.once(),
                  MockRestRequestMatchers.requestTo(<URL>))
            .andRespond(MockRestResponseCreators.withSuccess(
                <json-response>, MediaType.APPLICATION_JSON))
于 2020-05-06T12:59:55.673 回答