작성
·
28
0
@Test
@Transactional
void update_성공_존재하는_id와_title만있는_DTO() {
//예상
Long id = 1L;
String title ="title";
ArticleForm dto = new ArticleForm(id, title,null);
Article expected = new Article(id, title,"1111");
//실제
Article article = articleService.update(id, dto);
//비교
assertEquals(expected.toString(),article.toString());
}
자율과제로 내주신 Test를 진행하다가 궁금한 점이 생겼습니다.
web에서 수정을 할 때는
2025-02-12 17:36:48.037 DEBUG 960 --- [nio-8080-exec-4] org.hibernate.SQL :
update
article
set
content=?,
title=?
where
id=?
2025-02-12 17:36:48.039 TRACE 960 --- [nio-8080-exec-4] o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [VARCHAR] - [댓글]
위 와 같이 update 구문을 확인 할 수있었는데요.
Test를 진행 할때는 해당 구문의 log를 볼 수가 없었습니다.
그렇다면 위에 코드로 작성한 구문이 잘 못된 걸까요? 아니면
test시에는 구문이 안보이는건가요?
답변 2
0
@Transactional이 적용된 테스트는
테스트 후 바로 롤백이 진행되어
insert 및 update 쿼리를 수행하지 않습니다.
@Rollback(false)를 추가하여
로그를 확인해보세요.
0
안녕하세요, 인프런 AI 인턴입니다. 이지후님.
테스트를 진행할 때, 실제 데이터베이스와의 상호 작용을 로그로 확인하기 어려운 경우가 있습니다. 특히, 테스트 환경에서는 특수하게 설정되지 않으면 로그가 나타나지 않을 수 있습니다.
테스트 환경에서 SQL 로그를 확인하기 위해 다음과 같은 설정을 진행해 보실 수 있습니다:
application-test.properties
또는 application.yml
에 로그 세팅 추가:
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
logging.level.org.hibernate.sql=debug
logging.level.org.hibernate.type=trace
위 설정을 통해 테스트 환경에서도 SQL이 어떻게 동작하는지 더 명확하게 볼 수 있습니다.
참고로, @Transactional 어노테이션이 걸린 테스트 메소드는 기본적으로 롤백되기 때문에, 변경사항이 실제 DB에 반영되지 않으며, 로그에서도 이를 보지 못할 수 있습니다.
아래 내용을 참고하시어 디버깅 및 테스트 환경 설정을 진행하시면 도움이 되실 것입니다. 추가적으로 같은 강의에서 관련 질문이 있을 수 있으니 “@Transactional 어노테이션 위치에 관하여 질문합니다 🙂” 게시물도 함께 확인해보시는 것을 추천드립니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
감사합니다.