[CS 스터디] 테스팅

한주영·2023년 5월 18일
0

CS

목록 보기
16/19

단위테스트

•특정 메서드의 동작을 검증하거나 단일 클래스내에서
여러 메서드 간의 상호작용을 테스트
•분리된 코드 단위에 집중함으로써 개발 초기에 문제를 식별,수정하여
개별구성요소가 더 큰시스템에 통합되기전에 의도한대로 작동하는지 테스트하는 기법

통합테스트

•컨트롤러,서비스, 리포지토리, 데이터베이스, 외부 API 또는 기타
Spring모듈을 테스트
•실제 런타임 환경을 시뮬레이션 하기 위해 실행중인 Spring컨텍스트가 필요하다.
•@SpringBootTest 애너테이션인 Spring의 테스트 지원을 사용하거나 @ContextConfiguration 애너테이션을 이용해 작성할수있다

인수테스트

•비즈니스 로직에 초점을 준 테스트.
•전체 애플리케이션이 지정된 요구사항을 충족하고 사용자 관점에서
•예상대로 작동하는지 확인하는 테스트
애플리케이션이 원하는 비즈니스 목표를 충족하고 실제 서비스에서
올바르게 작동하는지 확인하는 것이 중요하다.

stub

•인스턴스화 하여 구현한 가짜 객체(더미객체, 기능 구현이없음)
을 이용해 실제로 동작하는 것처럼 보이게 만드는 객체

•서로 다른 구성요소 또는 시스템간의 상호작용을 테스트하는데 중점을 둔
통합 테스트 또는 인수테스트에서 주로 사용된다.

•스텁을 구현함으로써 개발자는 테스트중인 구성요소를 종속성에서
분리하여 보다 예측가능한 테스트 조건을 허용할수있다

stub이 주로 사용되는 경우?

-구현되지않은 함수나 라이브러리에서 제공하는 함수를 사용하고자할때
-함수가 반환하는 값을 임의로 생성하고싶을때
-복잡한 논리흐름을 가지는 경우 테스트를 단순화하고싶을때

mock

실제 객체를 만들어 사용하기에는 시간,비용등이 높거나 서로간의
의존성이 강해 구현하기 힘들경우 가짜 객체를 만들어 사용하는 방법

mock객체가 필요한경우?
-테스트 작성을 위한 환경 구축이 어려운경우
-테스트가 특정경우나 순간에 의존적인 경우
-테스트시간이 오래걸리는 경우
-개인pc의 성능이나 서버 성능문제로 인해 오래걸릴수있는 경우
시간을 단축하기 위해

mock과 stub의 차이점이 있다면
mock은 행위검증에 사용하고, stub은 상태검증에 사용된다.

SpringBoot계층별 테스트 방법

1.API계층 테스트
•Junit과 같은 테스트 프레임워크사용
•Mockito과 같은 프레임워크를 사용하여 서비스 계층종속성의 테스트버전을
시뮬레이션
•각각의 핸들러 매핑 테스트
•어셜션 객체를 사용하여 예상 결과값을 확인

2.서비스 계층 테스트
•Junit과 같은 테스트 프레임워크사용
•비즈니스 규칙, 유효성 검사 및 데이터 조작과 같은 서비스 계층 메서드의 논리 및 기능을 다루는 테스트를 작성
•어셜션 객체를 사용하여 예상 결과값을 확인

3.데이터 액세스 계층 테스트
•Junit과 같은 테스트 프레임워크사용
•테스트를 위해 인메모리 또는 임베디드 데이터베이스를 설정하거나 별도의 데이터베이스와 함께 테스트별 구성을 사용
•@DataJpaTest을 이용하여 테스트 저장소를 구성하고 생성한다.
•리포지토리에 정의된 CRUD작업 및 사용자 지정쿼리를 다루는 테스트를 작성
•어설션을 사용하여 데이터 지속성 및 검색 작업의 유효성을 검사

테스트 커버리지(JACOCO)

JACOCO는 자바 코드의 커버리지를 체크하는 라이브러리로
테스트코드가 현재 프로덕션코드의 얼마만큼 작성되어있는지 퍼센테이지로
확인하도록 해주는 라이브러리
만약 커버리지가100퍼센트라면 , 모든 프로덕션코드에대해서
테스트코드가 모두 작성되어 있는 상태라고 할수있다

JACOCO는 커버리지 결과를 알려줄뿐만아니라
해당 커버리지가 사용자가 설정한 퍼센테이지에 미치지 못하면
빌드자체가 되지않게 설정해서 테스트코드 작성을 강제한다

profile
백엔드개발자가 되고싶은 코린이:)

0개의 댓글