Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- mysql #linux #설정 #wordpress #웹사이트 #db 연결 #
- aws #아키텍트 #과정 #vpc #인프라 구축 #public subnet #igw #curl #명령어 #http
- 쓰레드 #쓰레드풀 #프로세스
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #AI #서버 #자동화 #SQL #KDT #기본문법 #데이터베이스 #Computer #Science #CPU #메모리
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #딥러닝 #AI #서버 #자동화 #SQL #기본문법 #데이터베이스
- aws #아키텍트 #과정 #vpc #인프라 구축
- aws #아키텍트 #과정 #vpc #인프라 구축 #퍼블릭 서브넷 #안에 #ec2 인스턴스 #ami #생성 #firewall
- aws #아키텍트 #과정 #vpc #인프라 구축 #php #웹페이지 #http #public #instance
- aws #아키텍트 #과정 #vpc #인프라 구축 #public subnet #route53 #igw #연결
- oracle vmbox #rocky #linux9 #명령어 #암호화인증 #해시알고리즘
- 공간복잡도 #공간자원 #캐시메모리 #SRAM #DRAM #시간복잡도
- aws #아키텍트 #과정 #vpc #인프라 구축 #public subnet #private subnet
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #OSI #ISO #AI #서버 #자동화 #SQL #기본문법 #데이터베이스 #DBMS #Oracle #MongoDB #아키텍쳐 #DB
- aws #아키텍트 #과정 #vpc #인프라 구축 #퍼블릭 #보안그룹 #생성 #http #ipv4
- aws #아키텍트 #과정 #vpc #인프라 구축 #public subnet #internet gateway #연결
- storage #로컬스토리지 #세션스토리지 #백그라운드 서비스
- ubuntu #설정변경 #vmware #vmbox #linux #명령어
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #AI #서버 #자동화 #SQL #기본문법 #데이터베이스
- 인바운드 #아웃바운드 #방화벽설정
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #딥러닝 #AI #서버 #자동화 #SQL #기본문법 #데이터베이스 #DBMS #Oracle #MongoDB #아키텍쳐 #DB
- 프로세스 #CPU #시공유 #커널
- haproxy #wordpree #php #linux #가상화 #가상머신 #내용정리
- 비트 #바이트 #이진수
- sasac #aws 클라우드 #아키텍트 과정 #가상화 #vmbox #vmware #esxi #tar #selinux
- virtualbox #vmware #router #nat #pat #네트워크 구성도 #aws #ubuntu #
- aws #클라우드 #퍼블릭 클라우드 #아키텍트 #과정
- aws #아키텍트 #과정 #s3 #bucket #생성 #이미지업로드
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #AI #서버 #자동화 #SQL #기본문법 #데이터베이스 #웹개발
- tar #build #배포 #통신포트 #설정방법 #linux #apache
- samba #가상머신 #daemon
Archives
- Today
- Total
요리사에서 IT개발자로
테스트 코드의 중요성 본문
프로젝트의 규모가 커질수록
간단한 기능 추가 또는 수정시 다른곳에 어떤 영향을 끼칠지 확신할 수 없다.
잘 동작하던 기능에도 이상이 생길 수 있다.
복잡한 기능일수록 내가 구현한 코드가 의도한대로 동작하는 지에 대한 검증이 필요하다.
테스트 코드는 모든 비즈니스로직에 대한 테스트 코드를 작성하는 것이 아니다.
단위 테스트란
작은 코드 조각(단위)를 검증
빠르게 수행되어야 하고
격리된 방식으로 처리하는 자동화 테스트이다.
비즈니스 로직을 외부 의존성으로 부터 격리하여 테스트 하는것.
좋은 테스트란
도메인 모데리 및 알고리즘(Dto, Entity, Util클래스)
노력 대비 단위 테스트의 가치가 매우 높다
해당 코드가 복잡하거나 중요한 로직을 수행해서 테스트의 회귀 방지가 향상된다
외부 의존성이 없어 테스트 유지비를 낮추기에 저렴하다.
간단한 코드는 테스트할 필요가 전혀없다.
컨트롤러는 엔드 투 엔드 테스트가 적합하고
단위테스트를 적용할 곳이 아니다.
좋은 단위 테스트의 4가지 특성
회귀 방지 : 기능오류를 방지해준다
리팩토링 내성 : 리팩토링을 해도 테스트가 깨지지않는다.
빠른 피드백 : 빠른 테스트 속도
유지 보수성 : 가독성과 재사용성이 좋고 실행되기 쉽게 작성되어야 한다.
@Test
@DisplayName("해당 게시글 존재하지 않는 테스트")
void test_NotFoundPost() {
given(postRepository.findById(anyLong())).willReturn(Optional.empty());
//Then
assertThrows(NotFoundException.class, () ->
postLikeService.addLikeToPost(1L, userDetails));
}
@Test
@DisplayName("해당 게시물에 이미 좋아요를 누른 경우 실패하는 테스트")
void test_AlreadyPostLike() {
given(postRepository.findById(1L)).willReturn(Optional.of(post));
when(postLikeRepository.existsByUserAndPost(any(), any())).thenReturn(true);
assertThrows(AlreadyException.class, () ->
postLikeService.addLikeToPost(1L, userDetails));
}
@Test
@DisplayName("본인 게시물의 좋아요를 누르면 실패하는 테스트")
void test_OwnPostsNotLiked() {
given(postRepository.findById(anyLong())).willReturn(Optional.of(post));
when(postLikeRepository.existsByUserAndPost(any(), any())).thenReturn(false);
assertThrows(IllegalArgumentException.class, () ->
postLikeService.addLikeToPost(1L, userDetails));
}
회귀 방지는 높이는 방법은
테스트가 가능한 한 많은 코드를 실행하는 것을 목표로 한다.
리팩토링 내성을 높이는 방법은
구현 세부 사항 대신에 최종 결과를 목표로 테스트를 작성하는 것이다.
테스트 코드가 모든 기능 오류를 방지해주는 것은 아니다.
반응형
'Spring' 카테고리의 다른 글
테스트 코드 작성? (단위테스트 JUnit) (0) | 2024.07.08 |
---|---|
Spring Boot @Transactional 요약 (0) | 2024.07.02 |
스파르타 코딩클럽 JPA 심화 JPARepository 기능 (0) | 2024.06.27 |
스파르타 코딩클럽 JPA 심화 트랜잭션 (0) | 2024.06.26 |
SQL 쿼리 delete메소드 작동에 대해 (0) | 2024.06.25 |