Поддельный ответ FeignClient

Можно ли имитировать ответ FeignClient через MockRestServiceServer (restTemplate)? Этот пример не работает:

Приложение.класс

@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();
    }

}

Мой тест.класс

@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.


person Sergey Bulavkin    schedule 19.09.2016    source источник
comment
Фальшивые клиенты — это интерфейсы. Наилучший подход, как правило, состоит в том, чтобы просто издеваться над интерфейсом напрямую.   -  person chrylis -cautiouslyoptimistic-    schedule 19.09.2016


Ответы (1)


На данный момент я знаю 2 хороших подхода:

  1. Используйте библиотеку wiremock (для Spring Boot я использую spring-cloud-contract-wiremock)
  2. Мокито (я использую @MockBean)
person Sergey Bulavkin    schedule 30.01.2018