java Sping Boot JUnit测试-如何从Wiremock返回响应

oewdyzsn  于 2022-12-28  发布在  Java
关注(0)|答案(1)|浏览(168)

我在Sping Boot 的JUnit测试中遇到了一个关于通过wiremock从请求返回响应的问题,因为我使用了微服务,所以我必须使用wiremock来调用另一个微服务的任何方法。
我想写一个wirerock来从这个进程中获取令牌值。
我尝试编写流程,但无法完成。我该如何完成?

@RegisterExtension
static WireMockExtension wireMockserver
        = WireMockExtension.newInstance()
        .options(WireMockConfiguration
                .wireMockConfig()
                .port(8080))
        .build();

wireMockserver.stubFor(get("/authenticate/login")
                .willReturn(aResponse()
                        .withStatus(HttpStatus.OK.value())
                        .withHeader("Content-Type", MediaType.APPLICATION_JSON_VALUE)
));

我怎样才能得到回应?
以下是响应。

@Data
@AllArgsConstructor
@NoArgsConstructor
public class JWTResponse {
    private String token;
    private String type = "Bearer";
    private String refreshToken;
    private int id;
    private String username;
    private String email;
    private List<String> roles;
}
mzsu5hc0

mzsu5hc01#

您可以指示wire mock在响应中返回一个body。
例如:

JWTResponse expected = podamFactory.manufacturePojo(JWTResponse.class);
wm.stubFor(post(testUrl)
     .willReturn(ok()
     .withBody(mapper.writeValueAsString(expected))
     .withHeader("Content-Type", "application/hal+json")));

其中,mapper是ObjectMapper mapper;的示例
我们在这里做的是当post ist在特定的testUrl上执行时返回预期的对象。由于对象是作为json传输的,我们需要使用Map器将对象传输到相应的字符串表示。

相关问题