ItemRepositoryTest.findItems()
@Test
void findItems() {
//given
Item item1 = new Item("itemA-1", 10000, 10);
Item item2 = new Item("itemA-2", 20000, 20);
Item item3 = new Item("itemB-1", 30000, 30);
itemRepository.save(item1);
itemRepository.save(item2);
itemRepository.save(item3);
//여기서 3개 이상이 조회되는 문제가 발생
test(null, null, item1, item2, item3);
}
실패는 했지만 데이터는 잘 추가되었다. → save()는 잘 작동하고 finditems()에서 문제가 있기 때문이다.
결과적으로 테스트에서 저정한 3개의 데이터가 조회 되어야 하는데, 기대보다 더 많은 데이터가 조회되었다.
실패 원인
왜 이런 문제가 발생하는 것일까?
혹시 테스트를 실행할 때 TestDataInit
이 실행되는 것은 아닐까?
→ 이 문제는 아니다. TestDataInit
은 프로필이 local
일때만 동작하는데,
테스트 케이스를 실행할 때는 프로필이 spring.profiles.active=test
이기 때문에 초기화 데이터가 추가되지는 않는다.
문제는 H2 데이터베이스에 이미 과거에 서버를 실행하면서 저장했던 데이터가 보관되어 있기 때문이다. 이 데이터가 현재 테스트에 영향을 준다. (보통 db에 데이터가 없다고 가정하고 진행하기 때문) H2 데이터베이스 콘솔을 열어서 데이터를 확인해보자.
H2 데이터베이스 데이터 확인 http://localhost:8082
SELECT * FROM ITEM
을 실행하면 이미 서버를 실행해서 확인 할 때의 데이터가 저장되어 있는 것을 확인할 수 있다.
이걸 어떻게 해결할 수 있을까?
→ Db 를 분리하는 것이다.