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))
我在 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:
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))