首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Mockito模拟Apache后HTTPClient

使用Mockito模拟Apache后HTTPClient
EN

Stack Overflow用户
提问于 2022-06-16 17:12:43
回答 4查看 496关注 0票数 1

我正在尝试使用Mockito和本文来测试HttpClient。我收到下面的错误,不知道如何修复。错误在下面。我也非常关注文章的内容。它在CloseableHttpResponse closeableHttpResponse = client.execute(httpPost)上失败了,而我已经在嘲笑它了。

资源:使用Mockito模拟Apache HTTPClient

主要代码:

代码语言:javascript
运行
复制
public class ProductService {

    private final VaultConfig vaultConfig;
    private final AppConfig appConfig;

    public ProductService(VaultConfig vaultConfig,
                          @Autowired AppConfig appConfig) {
            this.vaultConfig = vaultConfig;
            this.appConfig = appConfig;
    }

    private void createAccessToken() {
        String httpUrl = MessageFormat.format("{0}/api/v1/authentication/login",
            appConfig.getProductServerUrl());
        CloseableHttpClient client = HttpClients.createDefault();
        HttpPost httpPost = new HttpPost(httpUrl);
        List<NameValuePair> httpParams = new ArrayList<NameValuePair>();
        httpParams.add(new BasicNameValuePair("username", this.vaultConfig.getProductAdminUsername()));
        httpParams.add(new BasicNameValuePair("password", this.vaultConfig.getProductAdminPassword()));

        try {
            httpPost.setEntity(new UrlEncodedFormEntity(httpParams));
            CloseableHttpResponse closeableHttpResponse = client.execute(httpPost);
            HttpEntity entity = closeableHttpResponse.getEntity();
            String tokenDataJson = EntityUtils.toString(entity, "UTF-8");
            String newAccessToken = new Gson().fromJson(tokenDataJson, Map.class).get("access_token").toString();
            this.vaultConfig.setProductAccessToken(newAccessToken);
        } catch (Exception e) {
            logger.error("Unable to create access token: " + e.getMessage());
        }
    }

测试尝试:

代码语言:javascript
运行
复制
public class ProductServiceTest {

    private ProductService productService;
    @Mock
    HttpClients httpClients;
    @Mock
    CloseableHttpClient closeableHttpClient;
    @Mock
    HttpPost httpPost;
    @Mock
    CloseableHttpResponse closeableHttpResponse;
    @Mock
    private VaultConfig vaultConfig;
    @Mock
    private AppConfig appConfig;

    @BeforeEach
    public void initialize() {
        MockitoAnnotations.openMocks(this);
        productService = new ProductService(vaultConfig, appConfig);
    }


   void getAccessTokenWhenEmpty() throws IOException {
        //given
        String expectedProductAccessToken = "ABC";

        //and:
        given(appConfig.getProductServerUrl()).willReturn("https://test.abcd.com");
        given(closeableHttpClient.execute(httpPost)).willReturn(closeableHttpResponse);
        given(vaultConfig.getProductAccessToken()).willReturn("");

        //when
        String actualProductAccessToken = ProductService.getAccessToken();

        //then
        Assertions.assertEquals(actualProductAccessToken,expectedProductAccessToken);
    }

错误:

代码语言:javascript
运行
复制
    } catch (Exception e) {

java.net.UnknownHostException: test.abcd.com: unknown error
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72649574

复制
相关文章

相似问题

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