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

Untitled

Untitled

실패는 했지만 데이터는 잘 추가되었다. → save()는 잘 작동하고 finditems()에서 문제가 있기 때문이다.

결과적으로 테스트에서 저정한 3개의 데이터가 조회 되어야 하는데, 기대보다 더 많은 데이터가 조회되었다.

실패 원인 왜 이런 문제가 발생하는 것일까? 혹시 테스트를 실행할 때 TestDataInit 이 실행되는 것은 아닐까? → 이 문제는 아니다. TestDataInit 은 프로필이 local 일때만 동작하는데, 테스트 케이스를 실행할 때는 프로필이 spring.profiles.active=test 이기 때문에 초기화 데이터가 추가되지는 않는다.

문제는 H2 데이터베이스에 이미 과거에 서버를 실행하면서 저장했던 데이터가 보관되어 있기 때문이다. 이 데이터가 현재 테스트에 영향을 준다. (보통 db에 데이터가 없다고 가정하고 진행하기 때문) H2 데이터베이스 콘솔을 열어서 데이터를 확인해보자.

H2 데이터베이스 데이터 확인 http://localhost:8082

SELECT * FROM ITEM 을 실행하면 이미 서버를 실행해서 확인 할 때의 데이터가 저장되어 있는 것을 확인할 수 있다.


이걸 어떻게 해결할 수 있을까?

→ Db 를 분리하는 것이다.

테스트 - 데이터베이스 분리