인프런 커뮤니티 질문&답변

zlcls456님의 프로필 이미지

작성한 질문수

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

회원 서비스 테스트

단위테스트 시에는 성공, 전체 테스트 시에는 실패(afterEach)

작성

·

1.5K

0

안녕하세요

스프링 강의를 듣고 공부한 내용을 연습삼아서 예제를 만들어보는데요.

service 로직을 테스트하는데 오류가 걸려서 질문을 올립니다.

연습은 김영한 강사님의 스프링 강의를 참고하였습니다.

 

--문제

DB를 적용하지 않은 MemoryRepository를 주입 후

searchById를 단위 테스트 진행시에는 성공하나, 전체 테스트를 진행하면 오류가 납니다.

 

* 해당 테스트 부분 코드

* 단위 테스트 시 성공

* 전체 테스트 진행 시 오류

똑같이 객체를 생성해서 저장한 뒤, 해당 Id로 조회를 했으나 결과는 저장된 내용이 없다고 합니다. 

저는 위 상황이 repository가 전체 테스트 진행시 리셋이 안됐다고 판단했습니다. 

따라서 강의에서 배운대로 @AfterEach를 작성했지만, 여전히 오류에 걸리고 있습니다.

어느 부분을 놓치고 있는지 이유를 알 수 있을까요?

 

(추가적으로 컨트롤러를 생성해서 실제로 구동할 때에는 문제가 없습니다.)

log를 출력했을 때는 afterEach가 제대로 적용이 안되는 것을 알 수 있었습니다.

디버깅을 진행했을 시에 afterEach가 잘 적용되다가 마지막 테스트만 적용이 안됨

답변 2

2

안녕하세요. zlcls456님, 공식 서포터즈 David입니다.

1L로 찾지 마시고, write하고 반환된 entity로부터 getBoardNum()을 하셔서 찾아와보시겠어요?

감사합니다.

zlcls456님의 프로필 이미지
zlcls456
질문자

감사합니다 그렇게 했을 때 오류는 해결됐습니다.

혹시 위와 같이 결과가 나오는 문제의 이유를 알 수 있을까요?

repository가 clear되고 새로 생성해서 진행한다면 처음 데이터를 저장했을때 1번이 되어야할텐데 그렇지가 않네요ㅠㅠ

코드를 못 봐서 정확히는 답변드리지 못하지만.

저장할 때 id를 어떻게 할당하시는지, 그리고 store.clear했을 때 id 할당하는 로직에 어떤 영향을 미치는지 확인해주세요:)

아마, 데이터는 날아가지만 id를 할당하는 sequence는 초기화되지 않았을 것으로 추측됩니다.

1

zlcls456님의 프로필 이미지
zlcls456
질문자

답변 정말 감사합니다!!

zlcls456님의 프로필 이미지

작성한 질문수

질문하기