테스트 코드2 (DB와 외부API테스트)

오의석·2025년 1월 16일
0

DB 테스트
MyBatis 가정으로 작성(@Transactional으로 테스트 후 자동 롤백됨)

@SpringBootTest
@Transactional
@MapperScan("com.example.demo.mapper")  // 매퍼 스캔 위치 지정
class MyServiceTest {

    @Autowired
    private MyEntityMapper myEntityMapper;

    @Test
    void testDatabaseInteraction() {
        // 데이터베이스에 테스트 데이터를 삽입
        MyEntity entity = new MyEntity();
        entity.setName("Test");
        myEntityMapper.insertEntity(entity);

        // DB에서 데이터 조회
        MyEntity foundEntity = myEntityMapper.findByName("Test");
        assertNotNull(foundEntity);
        assertEquals("Test", foundEntity.getName());
    }
}

외부API 테스트
(외부API가 불러와졌다고 가정하고 만드는 테스트)

@SpringBootTest
class ExternalApiTest {

    @Autowired
    private RestTemplate restTemplate;

    private MockRestServiceServer mockServer;

    @BeforeEach
    void setUp() {
        mockServer = MockRestServiceServer.createServer(restTemplate);
    }

    @Test
    void testExternalApi() throws Exception {
        // mock response 설정
        mockServer.expect(requestTo("https://api.example.com/data"))
                  .andRespond(withSuccess("{ \"data\": \"value\" }", MediaType.APPLICATION_JSON));

        // 외부 API 호출
        ResponseEntity<String> response = restTemplate.exchange(
            "https://api.example.com/data",
            HttpMethod.GET,
            null,
            String.class
        );

        // 응답 결과 검증
        assertNotNull(response);
        assertEquals(HttpStatus.OK, response.getStatusCode());
        assertTrue(response.getBody().contains("value"));

        mockServer.verify();
    }
}
profile
끊임없이 나아가는 사람이 되어볼게요.

0개의 댓글