【问题标题】:How to test Feign REST client without acces to servise?如何在不访问服务的情况下测试 Feign REST 客户端?
【发布时间】:2018-08-12 09:59:54
【问题描述】:

我有简单的 REST 客户端:

   @FeignClient(name = "${service-parameters.name}", url = "${service-parameters.url}")
public interface ParametersClient {

@GetMapping("api/v1/parameters/by-site-id/{parameterName}/{siteId}")
Parameter getParameterBySiteId(
        @PathVariable(name = "parameterName") final String parameterName,
        @PathVariable(name = "siteId") final Long siteId,
        @RequestParam(name = "validityDate", required = false) LocalDate validityDate);

@GetMapping("api/v1/parameters/by-client-id/{parameterName}/{clientId}")
Parameter getParameterByClientId(
        @PathVariable(name = "parameterName") final String parameterName,
        @PathVariable(name = "clientId") final Long clientId,
        @RequestParam(name = "validityDate", required = false) LocalDate validityDate);

}

但我无法在我的测试中触及服务。所以我需要测试我在客户端创建的方法的请求。其他一切都在服务端进行测试。

这些是对我服务的正确要求: http://localhost:8080/api/v1/parameters/by-site-id/PSEUDO_ONLINE_ROOT_PATH/3000001?validityDate=2018-07-18

http://localhost:8080/api/v1/parameters/by-client-id/KOMBI_MINIMUM_NUMBER_GROUP/10508078

在不运行服务的情况下测试我的客户端的最佳方法是什么?我花了很多时间搜索,但没有找到对我的案例有用的东西:(。

非常感谢您的建议。

【问题讨论】:

    标签: rest junit mocking client feign


    【解决方案1】:

    我已经用以下代码解决了我的问题:

    @AutoConfigureMockMvc
    @SpringBootTest
    @RunWith(JUnitPlatform.class)
    @ExtendWith({ RestDocumentationExtension.class, SpringExtension.class })
    public class ParameterClientTest {
    
    private final RestTemplate restTemplate = new RestTemplate();
    
    @Autowired
    ParametersClient client;
    
    private final MockRestServiceServer mockServer = MockRestServiceServer.bindTo(restTemplate).bufferContent().build();
    
    @Test
    public void getParameterBySiteId() {
        mockServer.expect(once(), requestTo(REQUEST_BY_SITE_ID)).andRespond(withSuccess(RESPONSE_BY_SITE_ID, MediaType.APPLICATION_JSON));
        Response result = client.getParameterBySiteId(PSEUDO_ONLINE_ROOT_PATH, SITE_ID, VALIDITY_DATE);
        assertEquals(REQUEST_BY_SITE_ID, result.request().url());
    }
    
    @Test
    public void getParameterByClientId() {
        mockServer.expect(once(), requestTo(REQUEST_BY_CLIENT_ID)).andRespond(withSuccess(RESPONSE_BY_CLIENT_ID, MediaType.APPLICATION_JSON));
        Response result = client.getParameterByClientId(KOMBI_MINIMUM_NUMBER_GROUP, CLIENT_ID, VALIDITY_DATE);
        assertEquals(REQUEST_BY_CLIENT_ID, result.request().url());
    }
    

    }

    【讨论】:

    • 您能提供工作示例吗?我不知道 Feign 客户端流量如何进入 mockServer
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-21
    • 2023-03-19
    • 2019-12-17
    • 1970-01-01
    • 2010-09-12
    相关资源
    最近更新 更多