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

sagara12님의 프로필 이미지
sagara12

작성한 질문수

호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)

단위 테스트는 통과하는데 전체 테스트를 통과를 못하고 있습니다

작성

·

388

2

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
 
안녕하세요 호돌맨님 강의를 들으면서 저도 따라 만들고 있는데..
강의의 PostController Test에 해당 하는 부분에서 문제가 발생 했습니다.
각각의 단위 테스트는 통과를 하는데 Controller 전체를 돌려보면 문제가 발생하네요
@BeaforEach를 써서 clean 메소드도 구현 한 상태이고
@BeforeEach
void clean() {

writeRepository.deleteAll();
}
각 각 테스트에 테스트가 끝나면 queryDSL로 DB를 삭제해주는 쿼리를 넣어줘도 같은 문제가 일어납니다.
디버깅을 해봤을때
 
class WriteService 부분의 (강의 PostService에 해당)
 
public List<WriteResponse> getList(WriteSearch writeSearch) {
 
List<WriteResponse> collect = writeRepository.getList(writeSearch).stream()
.map(write -> new WriteResponse(write) )
.collect(Collectors.toList());
return collect;
 
이 부분에 writeId가 기존의 값에 +2가 되서 나오고 있습니다. (원래 writeId에 30이 출력 되어야 하는데 writeId 32가 출력이 됩니다. 단위 테스트 할때는 제대로 출력이 되는것을 확인 했습니다. )
오늘 내내 고쳐보려고 했는데 해결 방법이 안보이네요...
어떻게 고쳐야 할지 도와주시면 감사하겠습니다.
 
 
* 추가
Pageable pageable = PageRequest.of(page, 5, Sort.Direction.DESC, "writeId");
이 부분을 구현 하기전에  원래  write_Id였는데  writeId로 고쳤습니다. 이 부분에 문제가 생겼는지
쿼리를 보면 writeId로 생성 하는것이 아닌 write_Id로 테이블을 만들어졌습니다.
해당 문제도  writeId로 고치고 나서 발생하는 것 같습니다.
 
 

답변 3

1

호돌맨님의 프로필 이미지
호돌맨
지식공유자

왜 인지 알것 같기도 하고 모를것 같기도하고..
github에 소스 올려주시면 제 컴터에서 실행 해보는 게 빠를것 같습니다.
올리신 뒤에 주소좀 알려주세영

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

https://github.com/sagara12

에  dataPage라는 프로젝트입니다. 감사합니다.

 

호돌맨님의 프로필 이미지
호돌맨
지식공유자

답장이 늦어서 죄송합니다.
지금 함 돌려봤는데 왜 인지 알것 같습니다.

Write.java 엔티티를 보시면

strategy를 AUTO가 아닌 GenerationType.IDENTITY로 변경한 뒤 테스트 해보시겠어요?

그리고AUTO, IDENTITY가 어떤 걸 의미하는지, 그리고 각각 애플리케이션을 실행했을때 테이블이 어떻게 생성 되는지 h2 console에 들어가셔서 확인해보시면 좋을것 같습니다.

감사합니다.

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

한번 해보겠습니다 감사합니다 호돌맨님!

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

문제 해결했습니다 감사합니다. 호돌맨님

1

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

바쁘신데 감사드립니다

Write 엔티티 입니다.

테스트마다 TRUNCATE을 하는 클래스를 따로 구현 해서 @BeforeEach에 넣어서 해결 하려고 했는데 고쳐지지 않았습니다.

ALTER 쿼리에서 오류가 발생해서  검색 해본 결과

 entityManager.createNativeQuery("TRUNCATE TABLE " + "write " + "RESTART IDENTITY").executeUpdate();

로 자동증가하는 컬럼값을 초기화 할 수 있다고 해서 적용해봤는데 변함이 없었습니다.

감사합니다.

 

1

호돌맨님의 프로필 이미지
호돌맨
지식공유자

안녕하세요. 호돌맨입니다.
질문을 남겨주셔서 감사합니다.

보내주신것만 봐서는 정확히 모르겠는데용,
Entity쪽도 같이 스크린샷 첨부해주실 수 있나요?

참고로 deleteAll() 같은 경우는 데이터를 초기화 하는것이지
primary_id값을 (1로) 초기화 시켜주지 않으며 계속 증가하게 됩니다.

sagara12님의 프로필 이미지
sagara12

작성한 질문수

질문하기