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



我在版本5.10.0中使用Mock-Server(Mock-Server.com(来模拟JUnit5测试中的REST-API。我正在用Java8开发一个spring-boot应用程序。我的有效负载格式是"protobuf",因此我的REST接口返回一个ResponseEntity<MyProtoObject>。不幸的是,我在Mock Server中找不到一个内置的解决方案,即自定义对象由Mock Server作为主体返回。我只找到了像withBody(String)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调用结果来自使用不同返回代码的模拟服务器。

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

不幸的是,我通过Slack收到了模拟服务器开发人员的回复,说不可能返回自定义对象。模拟服务器不清楚它们应该如何(去(序列化。因此,我将尝试通过byte[]使用一种变通方法

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

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

最新更新