【问题标题】:Mockito mock WebClient Json responseMockito 模拟 WebClient Json 响应
【发布时间】:2021-09-16 13:22:17
【问题描述】:

我想在 Spring 中模拟 WebClient。

public Test getTest(String lanId) {

    return webClient.get()
            .uri("url")
            .retrieve()
            .bodyToMono(Test.class)
            .block();
}

测试方法:

@Mock ????
WebClient webClient;

@InjectMocks
TranslateDao translateDao;

@Test
void getUserId() {
    webClient = WebClient.builder().build();

    var ww = translateDao.getTest("qw");
    System.out.println("");
}

当我在 webClient 上尝试不使用 @Mock 时,我得到了空指针。 我想做这样的事情:

when(WebClient.sth).thenReturn("{JSON!!}")
var result = translateDao.getTest("test")
assert....

有什么想法吗?

【问题讨论】:

    标签: java spring testing mockito junit5


    【解决方案1】:

    我的建议是不要模拟 WebClient,而是使用 MockWebServer。

    如果你坚持要模拟 WebClient,你需要模拟它的每一部分:

    @Mock
    private WebClient.RequestBodyUriSpec requestBodyUriMock;
    @Mock
    private WebClient.RequestHeadersSpec requestHeadersMock;
    @Mock
    private WebClient.RequestBodySpec requestBodyMock;
    @Mock
    private WebClient.ResponseSpec responseMock;
    @Mock
    private WebClient webClient;
    
    @InjectMocks
    YourService serviceUsingWebClient;
    
    @Test
    void makeAPostRequest() {
    
        when(requestBodyUriMock.uri(eq("uri"))).thenReturn(requestBodyMock);
        when(requestBodyMock.bodyValue(eq(yourPojoRequestHere))).thenReturn(requestHeadersMock);
        when(webClient.post()).thenReturn(requestBodyUriMock);
        when(requestHeadersMock.retrieve()).thenReturn(responseMock);
        when(responseMock.bodyToMono(YourPojoClass.class)).thenReturn(Mono.just(yourPojoResponse));
    }
    

    【讨论】:

      【解决方案2】:

      这个问题有点令人困惑,因为:

      1. 您在模拟 Web 客户端
      2. 在您的测试中,您为模拟值分配了一个实际值(这似乎不正确)
      3. 在上一个示例中,您试图模拟 WebClient 上的静态调用(mockito 不支持开箱即用)

      WebClient 是否通过依赖注入或其他方式提供给你的类?

      编辑:似乎当您想要模拟 WebClient 时,您将面临大量的模拟...

      参考:https://www.baeldung.com/spring-mocking-webclient

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-07
        • 1970-01-01
        • 1970-01-01
        • 2020-05-14
        • 1970-01-01
        • 2022-07-06
        • 2022-01-15
        • 1970-01-01
        相关资源
        最近更新 更多