模拟 FeignClient 响应
Mock FeignClient response
是否可以通过MockRestServiceServer(restTemplate)模拟响应FeignClient?
此示例不起作用:
Application.class
@SpringBootApplication
@EnableFeignClients
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
TicketService.class
@FeignClient("ws")
public interface TicketService {
@RequestMapping(value = "/tickets/")
List<Ticket> findAllTickets();
}
TestConfig.class
@Profile("test")
@Configuration
public class TestConfig {
@Bean
@Primary
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
MyTest.class
@ActiveProfiles("test")
@RunWith(SpringRunner.class)
@SpringBootTest(classes = {Application.class}, properties = {"ws.ribbon.listOfServers:example.com"})
public class MyTest {
@Autowired
RestTemplate restTemplate;
@Autowired
DispatcherService dispatcherService; // service where the execution of the method TicketService.findAllTickets();
private MockRestServiceServer mockServer;
@Before
public void setUp() {
mockServer = MockRestServiceServer.createServer(restTemplate);
}
@Test
public void ticket() {
mockServer.expect(requestTo("http://example.com/tickets/"))
.andExpect(method(HttpMethod.GET))
.andRespond(withSuccess(new ClassPathResource("tickets.json"), MediaType.APPLICATION_JSON));
dispatcherService.run();
}
}
但是向真实服务器发出请求example.com。
目前我知道 2 个好的方法:
- 使用 wiremock 库(对于 Spring Boot 我使用 spring-cloud-contract-wiremock)
- Mockito(我使用 @MockBean)
是否可以通过MockRestServiceServer(restTemplate)模拟响应FeignClient? 此示例不起作用:
Application.class
@SpringBootApplication
@EnableFeignClients
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
TicketService.class
@FeignClient("ws")
public interface TicketService {
@RequestMapping(value = "/tickets/")
List<Ticket> findAllTickets();
}
TestConfig.class
@Profile("test")
@Configuration
public class TestConfig {
@Bean
@Primary
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
MyTest.class
@ActiveProfiles("test")
@RunWith(SpringRunner.class)
@SpringBootTest(classes = {Application.class}, properties = {"ws.ribbon.listOfServers:example.com"})
public class MyTest {
@Autowired
RestTemplate restTemplate;
@Autowired
DispatcherService dispatcherService; // service where the execution of the method TicketService.findAllTickets();
private MockRestServiceServer mockServer;
@Before
public void setUp() {
mockServer = MockRestServiceServer.createServer(restTemplate);
}
@Test
public void ticket() {
mockServer.expect(requestTo("http://example.com/tickets/"))
.andExpect(method(HttpMethod.GET))
.andRespond(withSuccess(new ClassPathResource("tickets.json"), MediaType.APPLICATION_JSON));
dispatcherService.run();
}
}
但是向真实服务器发出请求example.com。
目前我知道 2 个好的方法:
- 使用 wiremock 库(对于 Spring Boot 我使用 spring-cloud-contract-wiremock)
- Mockito(我使用 @MockBean)