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