Project 해축갤/테스트 코드(9)
-
JUnit5 테스트 메서드는 왜 public 이면 안될까?
최근 코드 품질을 올리고 싶어 IDE에 SonarLint을 설치했더니 다음과 같은 경고를 받게 됐다. 요는 테스트 메서드에서 public 접근 제어자를 없애라라는 경고이다. 필자가 아는 지식은 JUnit 이 실행시에 테스트 메서드를 Reflection API로 뜨기 위해서 public 접근 제어자가 필수라고 알고 있었다. JUnit 5 제작자 왈 public 일 필요는 없지만, private 이면 안된다! 일반적으로 public 제어자는 기술적인 모종의 이유가 아닌 이상 쓰지 말아라 [출처] : https://junit.org/junit5/docs/current/user-guide/#writing-tests-classes-and-methods 요약하자면 우리 JUnit 5 팀은 "Less is more"..
2024.01.08 -
Java @Scheduled: 매시 정각에 실행되는 Cron 표현식 테스트하기
배경 @Transactional @Scheduled(cron = "0 0 * * * *") public void updatePopularPosts() { // 새로운 상위 10개 게시물 추출 List top10Posts = postRepository.findTop10Posts(); // 기존의 data 삭제 popularPostRepository.deleteAllInBatch(); // 변환 후 새로운 data 삽입 List popularPosts = convertToPopularPost(top10Posts); popularPostRepository.saveAll(popularPosts); } 위 함수에 대한 테스트 코드를 작성해보려 하다 이런 글을 쓰게 되었습니다. 테스트의 목적은 매 정시에 함수가 실..
2023.12.20 -
테스트 띠띠ㅣ디ㅣ디ㅣ딛ㄹ딸깍? postman 으로 '띡띡딸깍' 하기
현재 다음과 같은 작업을 진행 중에 있습니다. 💡 데이터베이스에 1억 건이 있을 때 나의 가련한 API의 성능(반응시간)은 어느 정도 나올까? 현재 조회 쿼리는 인덱스도 뭐도 없고 단순한 형태의 CRUD 의 조회용 쿼리이기 때문에 1억 건에서 데이터를 뽑는 데는 실제로 오래 걸릴 것입니다. // 실제 사용하는 오늘의 코드 @Override public List findAllDTOs(Integer offset, Integer limit) { return queryFactory .select(new QPostDbDTO( post.id, post.title, post.content, post.member.name, post.isDeleted, post.reg_date )) .from(post) .orderBy..
2023.11.30 -
Hibernate의 "Detached Entity Passed to Persist" 오류 이해와 해결
오류 이해하기 Detached(준영속) 상태란? Hibernate 및 JPA에서 엔티티의 생명주기 중 하나인 'Detached' 상태는 영속석 컨텍스트가 더 이상 해당 객체를 추적하지 않을 때 발생합니다. 세션이 닫히거나(close), 클리어될 때(clear), 또는 수동으로 영속성 컨텍스트에서 제거(detach) 될 때 이 상태에 도달할 수 있습니다. Entity의 상태 코드 EntityState enum을 보면 public enum EntityState { PERSISTENT, TRANSIENT, DETACHED, DELETED; static final CoreMessageLogger LOG = CoreLogging.messageLogger( EntityState.class ); /** * Deter..
2023.11.08 -
org.mockito.exceptions.misusing.UnnecessaryStubbingException 해결
// PostService의 게시글 수정(updatePost) 정상 케이스 테스트 코드 @Test public void updatePost_ShouldChangePostDetails_WhenUpdateInfoIsValid() throws Exception { // given - 상황 만들기 Long postId = 1L; PostUpdateDTO postUpdateDTO = PostUpdateDTO.builder() .title("Updated Title") .content("Updated Content") .build(); Post existingPost = Post.builder() .id(postId) .title("Title") .content("Content") .build(); when(pos..
2023.11.07 -
테스트를 더 빨리 끝내보기 (feat. 자료구조, singletonList)
https://github.com/xpmxf4/HaeChuk-Gallery/blob/main/src/test/java/HailYoungHan/Board/controller/PostControllerTest.java 위와 같은 코드가 있는 데 테스트하는 게 일일이 귀찮아서 시작했던 테스트 코드를 이제는 더 빨리 굴려볼 수는 없을까 라는 고민이 들어 코드를 한번 개선해보고자 했습니다. 그렇다면 어떤 부분을 개선할 수 있을까 라는 고민을 하다가 List allPosts 부분을 봤습니다. 자료구조를 사용한다면 어떻게 더 빠른 코드가 생성이 될 수도 있지 않을까 싶었습니다. 그래서 다음 2가지 코드를 한번 짜봤습니다. List 자료구조를 활용해 게시물 담기 처음은 기존처럼 Arrays.asList() 를 사용해 ..
2023.11.02