일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #딥러닝 #AI #서버 #자동화 #SQL #기본문법 #데이터베이스 #DBMS #Oracle #MongoDB #아키텍쳐 #DB
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #AI #서버 #자동화 #SQL #기본문법 #데이터베이스 #웹개발
- aws #아키텍트 #과정 #vpc #인프라 구축 #public subnet #internet gateway #연결
- aws #아키텍트 #과정 #vpc #인프라 구축 #public subnet #private subnet
- 쓰레드 #쓰레드풀 #프로세스
- virtualbox #vmware #router #nat #pat #네트워크 구성도 #aws #ubuntu #
- ubuntu #설정변경 #vmware #vmbox #linux #명령어
- 공간복잡도 #공간자원 #캐시메모리 #SRAM #DRAM #시간복잡도
- aws #클라우드 #퍼블릭 클라우드 #아키텍트 #과정
- sasac #aws 클라우드 #아키텍트 과정 #가상화 #vmbox #vmware #esxi #tar #selinux
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #AI #서버 #자동화 #SQL #기본문법 #데이터베이스
- aws #아키텍트 #과정 #vpc #인프라 구축 #php #웹페이지 #http #public #instance
- 인바운드 #아웃바운드 #방화벽설정
- aws #아키텍트 #과정 #vpc #인프라 구축 #public subnet #igw #curl #명령어 #http
- aws #아키텍트 #과정 #vpc #인프라 구축
- tar #build #배포 #통신포트 #설정방법 #linux #apache
- 프로세스 #CPU #시공유 #커널
- aws #아키텍트 #과정 #vpc #인프라 구축 #public subnet #route53 #igw #연결
- aws #아키텍트 #과정 #vpc #인프라 구축 #퍼블릭 서브넷 #안에 #ec2 인스턴스 #ami #생성 #firewall
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #OSI #ISO #AI #서버 #자동화 #SQL #기본문법 #데이터베이스 #DBMS #Oracle #MongoDB #아키텍쳐 #DB
- haproxy #wordpree #php #linux #가상화 #가상머신 #내용정리
- aws #아키텍트 #과정 #vpc #인프라 구축 #퍼블릭 #보안그룹 #생성 #http #ipv4
- samba #가상머신 #daemon
- aws #아키텍트 #과정 #s3 #bucket #생성 #이미지업로드
- oracle vmbox #rocky #linux9 #명령어 #암호화인증 #해시알고리즘
- 비트 #바이트 #이진수
- storage #로컬스토리지 #세션스토리지 #백그라운드 서비스
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #AI #서버 #자동화 #SQL #KDT #기본문법 #데이터베이스 #Computer #Science #CPU #메모리
- mysql #linux #설정 #wordpress #웹사이트 #db 연결 #
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #딥러닝 #AI #서버 #자동화 #SQL #기본문법 #데이터베이스
- Today
- Total
요리사에서 IT개발자로
Spring Boot JUnit 과 TDD, 단위테스트와 통합테스트 본문
TDD란
애자일 개발 방식 중 하나이며
테스트 주도 개발이라는 의미를 가진다
코드 작성 후 테스트를 진행하는 지금까지 사용된 방식과 차이가 있다.
단순하게 표현하면
테스트를 먼저 설계 및 구축한 후에 테스트를 통과할 수 있는 코드를 짜는것이다.
테스트 코드의 작성 목적
코드의 안전성을 높일 수 있고
기능을 추가하거나 변경되는 과정에서 발생할 수있는 Side-Effect를 줄일 수 있다.
해당 코드가 작성된 목적을 명확하게 표현할 수 있다.
코드에 불필요한 내용이 들어가는것을 줄일 수 있다.
JUnit이란
Java 진영의 대표적인 Test Framework이다
단위테스트(Unit Test)를 위한 도구를 제공한다.
단위 테스트란?
코드의 특정 모듈이 의도된 대로 동작하는지 테스트 하는 절차를 의미하고
모든 함수와 메소드에 대한
각각의 테스트 케이스(Test Case)를 작성하는 것
어노테이션(Annotation)을 기반으로 테스트를 지원하고
단정문(Assert)으로
테스트 케이스의 기대값에 대해 수행 결과를 확인할 수 있다.
Spring Boot 2.2 버전부터 JUnit5버전을 사용한다.
JUnit 모듈
Junit Jupiter, JUnit Platform , JUnit Vintage
Junit Jupiter란
TestEngine API 구현체로 JUnit5 를 구현하고 있다.
테스트의 실제 구현체는 별도 모듈 역할을 수행하는데,
그 모듈 중의 하나가 Jupiter-Engine이다.
이 모듈은 Jupiter-API를 사용하여 작성한
테스트 코드를 발견,하고 실행하는 역할을 수행한다.
개발자가 테스트 코드를 작성할 때 사용한다
JUnit Platform 이란
Test를 실행하기 위한 뼈대
Test를 발견하고 테스트 계획을 생성하는
TestEngine 인터페이스를 갖고있다.
TestEngine을 통해 Test를 발견하고, 수행 및 결과를 보고한다.
그리고 각종 IDE 연동을 보조하는 역할을 수행한다.(콘솔 출력 등)
JUnit Vintage란
TestEngine API 구현체로 JUnit 3,4를 구현한다
기존 JUnit 3,4 버전으로 작성된 테스트 코드를 실행할 때 사용된다.
JUnit LifeCycle Annotation
JUnti5는 아래와 같은 테스트 라이프 사이클을 가지고있다.
Annotation | Description |
@Test | 테스트용 메소드를 표현하는 어노테이션 |
@BeforEach | 각 테스트 메소드가 시작되기 전에 실행되어야 하는 메소드를 표현한다. |
@AfterEach | 각 테스트 메소드가 시작된 후 실행되어야 하는 메소드를 표현한다. |
@BeforeAll | 테스트 시작 전에 실행되어야 하는 메소드를 표현한다.(static 처리가 필요하다.) |
@AfterAll | 테스트 종료 후에 실행되어야 하는 메소드를 표현한다.(static 처리가 필요하다. |
JUnit Main Annotation
@SpringBootTest
통합 테스트 용도로 사용된다.
@SpringBootApplication을 찾아가서 하위의 모든 Bean을 스캔하고 로드한다.
@SpringBootApplication
public class Junit5PracticeApplication {
public static void main(String[] args) {
SpringApplication.run(Junit5PracticeApplication.class, args);
}
}
그 후에 Test용 Application Context를 만들어
Bean을 추가하고, Mock Bean을 찾아서 교체한다.
@ExtendWith
JUnit4에서 @RunWith로 사용되던 어노테이션이 ExtendWith로 변경된다.
@ExtendWith는 메인으로 실행될 Class를 지정할 수 있다.
@SpringBootTest는 기본적으로 @ExtendWith가 추가되어 있다.
@WebMvcTest(Class명 .class)
()에 작성된 클래스만 실제로 로드하여 테스트를 진행한다.
매개변수를 지정해주지 않으면
@Controller, @RestController, @RestControllerAdvice 등 컨트롤러와 연관된 Bean이 모두 로드된다.
스프링의 모든 Bean을 로드하는 @SpringBootTest 대신에
컨트롤러 관련 코드만 테스트할 경우에 사용한다.
@Authwired about Mockbean
Controller의 API를 테스트하는 용도인 MockMvc객체를 주입받는다
perform()메소드를 활용하여 컨트롤러의 동작을 확인할 수 있다.
.andExpect(), andDO(), andReturn()등의 메소드를 같이 활용한다.
@MockBean
테스트할 클래스에서 주입받고 있는 객체에 대해 가짜 객체를 생성해주는 어노테이션이고
해당 객체는 실제 행위를 하지않는다.
given() 메소드를 활용하여
가짜 객체의 동작에 대해서 정의하여 사용할 수 있다.
@AutoConfigureMockMvc
Spring.test.mockmvc의 설정을 로드하면서 MockMvc의 의존성을 자동으로 주입한다
MockMvc 클래스는 REST API 테스트를 할 수 있는 클래스이다.
@Import
필요한 Class들을 Configuration으로 만들어서 사용할 수 있다.
Configuration Component클래스도 의존성을 설정할 수 있다.
Import된 클래스는 주입으로 사용이 가능하다.
통합 테스트는
여러 기능을 조합하여
전체 비즈니스 로직이 제대로 동작하는지 확인하는 것을 의미한다.
통합테스트의 경우, @SpringBootTest를 사용하여 진행한다.
@SpringBootTest는 @SpringBootApplication을 찾아가서 모든 Bean을 로드한다.
대규모 프로젝트에서 사용하면
모든빈을 스캔하고 로드하는 작업이 반복되어
매번 무거운 작업을 수행해야한다.
단위 테스트는
프로젝트에 필요한 모든 기능에 대한 테스트를 각각 진행하는 것을 의미한다.
일반적으로 스프링 부트에서는
testImplementation 'org.springframework.boot:spring-boot-starter-test'
디펜던시 만으로 의존성을 모두 가질 수 있다.
F.I.R.S.T 원칙
Fast
- 테스트 코드의 실행을 빠르게 진행되어야 한다.
Independent
- 독립적인 테스트가 가능해야 한다.
Repeatable
- 테스트는 매번 같은 결과를 만들어야 한다.
Self-Validating
- 테스트는 그 자체로 실행하여 결과를 확인할 수 있어야 한다. (결과값이 변하면안된다)
Timely
- 단위 테스트는 비즈니스 코드가 완성되기 전에 구성하고 테스트가 가능해야한다. (TDD원칙)
https://www.youtube.com/watch?v=SFVWo0Z5Ppo&t=792s
'Spring' 카테고리의 다른 글
스파르타 부트캠프 객체와 관계형 DB (다락방) (0) | 2024.06.18 |
---|---|
스파르타 부트캠프 JPA (다락방) (0) | 2024.06.18 |
스파르타 부트캠프 REST API 요청과 응답 (다락방) (0) | 2024.06.14 |
스파르타 부트캠프 스프링 부트 U(update)D(delete) 다락방 (3) | 2024.06.13 |
스파르타 부트캠프 스프링 부트 프로젝트 생성 및 CR (다락방) (1) | 2024.06.12 |