[java] Java Jersey에서 테스트 환경에서 외부 API 호출을 가짜로 대체하는 방법은?
  1. Mocking Framework 사용: Mockito와 같은 Mocking Framework를 사용하여 외부 API 호출을 가짜로 대체할 수 있습니다. 이를 사용하면 실제 API 호출을 대신하여 원하는 결과를 반환하도록 설정할 수 있습니다. 예를 들어, 호출에 대해 성공 또는 실패 응답을 제공하거나 반환되는 데이터를 조작할 수 있습니다.
import static org.mockito.Mockito.*;

public class MyTest {

    @Test
    public void testApiCall() {
        MyService myService = new MyService();
        ExternalApi mockApi = mock(ExternalApi.class);
        when(mockApi.getData()).thenReturn("Mocked data");
        
        myService.setExternalApi(mockApi);
        
        String result = myService.doApiCall();
        
        assertEquals("Mocked data", result);
    }
}
  1. Mock 서버 구축: 테스트 환경에서 HTTP 요청에 대해 가짜로 응답을 제공하는 Mock 서버를 구축할 수 있습니다. WireMock이나 MockServer와 같은 도구를 사용하여 실제 API와 유사한 엔드포인트를 생성하고, 요청에 대해 사전에 정의된 응답을 반환하도록 설정할 수 있습니다.
import com.github.tomakehurst.wiremock.WireMockServer;
import static com.github.tomakehurst.wiremock.client.WireMock.*;

public class MyTest {

    private WireMockServer wireMockServer;

    @Before
    public void setup() {
        wireMockServer = new WireMockServer();
        wireMockServer.start();
        
        configureFor("localhost", wireMockServer.port());
    }

    @After
    public void tearDown() {
        wireMockServer.stop();
    }

    @Test
    public void testApiCall() {
        MyService myService = new MyService();
        myService.setApiEndpoint("http://localhost:" + wireMockServer.port() + "/api");
        
        stubFor(get(urlEqualTo("/api"))
                .willReturn(aResponse()
                .withStatus(200)
                .withBody("Mocked data")));
        
        String result = myService.doApiCall();
        
        assertEquals("Mocked data", result);
    }
}

이러한 방법을 사용하여 Java Jersey에서 테스트 환경에서 외부 API 호출을 가짜로 대체할 수 있습니다. 이를 통해 테스트 전략을 개발하고 외부 의존성에 구애받지 않고 효과적인 테스트를 수행할 수 있습니다.