首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Junit和Mockito创建webclient单元测试?

如何使用Junit和Mockito创建webclient单元测试?
EN

Stack Overflow用户
提问于 2022-10-10 04:11:55
回答 2查看 149关注 0票数 0

如何创建这个私有方法的单元测试,使用Junit4和Mockito返回void

代码语言:javascript
运行
复制
    private void fetchToken() {
        try {
        webClientBuilder.build().post().uri("http://localhost:8082/token")
                    .headers(httpHeaders -> httpHeaders.setBasicAuth("anyusername", "password")).retrieve()
                    .bodyToMono(Token.class).block();
        } catch (Exception e) {
            System.out.println("Error: " + e.getMessage());
        }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-10-10 08:04:39

像这样使用莫基托

代码语言:javascript
运行
复制
    @Mock
    private WebClient webClient;
    @Mock
    private WebClient.RequestBodyUriSpec uriSpec;
    @Mock
    private WebClient.RequestBodyUriSpec headerSpec;


    @Test
    void someTest(){
            WebClient.RequestBodyUriSpec bodySpec = mock(WebClient.RequestBodyUriSpec.class);
            WebClient.ResponseSpec response = mock(WebClient.ResponseSpec.class);
    
            when(webClient.post()).thenReturn(uriSpec);
            when(uriSpec.uri(uri)).thenReturn(headerSpec);
            doReturn(bodySpec).when(headerSpec).bodyValue(body);
            when(bodySpec.retrieve()).thenReturn(response);
    }
票数 1
EN

Stack Overflow用户

发布于 2022-10-10 07:58:15

一个更干净和不那么脆弱的方法是不要模仿WebClient,而是使用工具WireMockMockWebServer来模拟外部API。

我通常使用MockWebServer。您可以说这是一个集成测试,而不是单元测试。但它的速度术语,MockWebServer非常快,就像单元测试。此外,它允许您使用真正的WebClient实例来真正执行完整的HTTP堆栈,并且您可以更加确信您正在测试所有内容。

你可以这样做:

代码语言:javascript
运行
复制
public class SomeTest {
    
    
    private MockWebServer server;

    @Test
    public void someTest(){

        MockWebServer server = new MockWebServer();
        server.start();
        HttpUrl baseUrl = server.url("/token");

        //stub the server to return the access token response
        server.enqueue(new MockResponse().setBody("{\"access_token\":\"ABC\"}"));

       //continues execute your test
        ....

    }


}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74010147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档