Giriş
3 taraf API'leri test etmek için WireMock kullanmak zorunda değiliz.
1. Test kodunda 3 taraf API'yi taklit eden ama localhost üzerinde çalışan kod yazılır
2. RestTemplate localhost'a yönlendirilir
Elimizde şöyle bir kod olsun
// application.propertiesdownstream.basepath=https://dev.faas.neuw.io/function// SpringBootApplication.java@Beanpublic RestTemplate restTemplate(@Value("${downstream.basepath}") String rootUri) {return new RestTemplateBuilder().rootUri(rootUri).build();}@RestControllerpublic class UpstreamController {private final DownstreamClientService downstreamClientService;@GetMapping("/v1/upstream")public Pong test() {return downstreamClientService.getPong();}}@Servicepublic class DownstreamClientService {private final RestTemplate restTemplate;public Pong getPong() {return restTemplate.getForObject("/ping", Pong.class);}}
test içinde şöyle yaparız.
Test yine UpstreamController nesnesin tetikler.
O da DownstreamClientService nesnesini tetikler.
O da RestTemplate localhost'u işaret ettiği için localhost üzerindeki ping servisini tetikler
// src/test/resources/application.properties # on this port the unit tests will run server.port=58080 downstream.basepath=http://localhost:${server.port} //SpringBootApplicationTests.java @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT) class SpringBootApplicationTests { @Autowired TestRestTemplate testRestTemplate; @Test void testPong() { Pong res = testRestTemplate.getForObject("/v1/upstream", Pong.class); assertEquals(true, res.isSuccess()); assertEquals("pong", res.getMessage()); } } @RestController public class DownstreamMockController { @GetMapping("ping") public Pong test() { logger.info("for testing only, downstream hosted from the test package's controller"); return new Pong("pong", true, new Date().getTime(), true); } }
Hiç yorum yok:
Yorum Gönder