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 | 31 |
Tags
- 에러
- lv1
- stringbuffer
- @AllArgsConstructor
- entity
- 프로그래머스
- DTO
- 깃허브
- git
- HTML
- 파이썬
- 기본생성자
- 코드업
- 자바
- 상속
- Python
- 알고리즘
- 부스트코스
- 브랜치
- Codeup
- java
- 캡슐화
- @builder
- github
- HashSet
- SQL
- CRUD
- 부트캠프
- @NoArgsConstructor
- html tag
Archives
- Today
- Total
잉?
[SpringBoot] 단위 테스트(Unit Tests)는 뭔데? + 사용 이유 본문
- x축이 Time
- y축이 Costs
1. 개발
2. 단위 테스트(Unit Test)
3. QA Testing
4. Prodiction(실 서비스 운영 환경)
버그를 사전에 발견하여 기하급수적인 비용의 증가가능성을 사전에 방지하기 위해 단위 테스트를 진행한다.
[단위 테스트? (Unit Test)]
단위 테스트는 작은 단위로 쪼개 각 단위가 정확하게 동작하는지 예상대로 동작하는지 검사 및 확인하는 테스트이다.
단위의 크기가 작을 수록 복잡성이 낮아진다.
따라서 단위의 크기를 작게하여 최대한 간단하고 쉽게 작성해야 한다.
만약 방대한 코드를 가진 소프트웨어에 버그가 발생되었다.
디버깅을 통해 범위는 좁혀졌지만 어떤 클래스에 버그가 있는지 정확히 알지 못한다.
이 클래스에 버그가 있는것 같아서! 코드를 고쳤다면 분명 몇 달 뒤 기존 버그 + 새롭게 수정된 곳의 버그까지
발생될 것이다. 이러한 일들을 방지하기 위해 유닛테스트를 활용해야한다.
프로그래밍 언어마다 단위 테스트에서 사용하는 프레임워크가 다르다.
Java에서는 JUnit을 사용한다.
@BeforeEach | 각각의 테스트가 실행되기 전 수행 |
@AfterEach | 각각의 테스트가 실행된 후 수행 |
@BeforeAll | 모든 테스트가 실행되기 전 처음으로 수행 |
@AfterAll | 모든 테스트가 실행된 후 마지막으로 수행 |
@BeforeEach
void setUp() {
System.out.println("각각의 테스트 코드가 실행되기 전에 수행");
}
@AfterEach
void tearDown() {
System.out.println("각각의 테스트 코드가 실행된 후에 수행\n");
}
@BeforeAll
static void beforeAll() {
System.out.println("모든 테스트 코드가 실행되기 전에 최초로 수행\n");
}
@AfterAll
static void afterAll(){
System.out.println("모든 테스트 코드가 수행된 후 마지막으로 수행");
}
@Test
void test1(){
System.out.println("테스트 코드 작성 1");
}
@Test
void test2(){
System.out.println("테스트 코드 작성 2");
}
@DisplayName | 테스트의 내용을 알아볼 수 있게 네이밍 해준다. |
@Nested | 주제 별로 그룹짓기 |
@Order | 테스트를 단위별로 순서를 매길때 사용. @TestMethodOrder(MethodOrderer.OrderAnnotation.class) 붙여줘야 한다. |
@Test
@DisplayName("테스트의 내용을 한눈에 알아볼 수 있게 네이밍 해줄 때")
void test1(){
System.out.println("테스트 내용 빠르게 파악");
}
@Nested
@DisplayName("주제 별로 테스트를 그룹지어서 파악하기 좋습니다.")
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
class Test1 {
@Order(1)
@Test
@DisplayName("Test1 클래스")
void test() {
System.out.println("\nTest1 클래스");
}
@Order(3)
@Test
@DisplayName("Test1 - test1()")
void test1() {
System.out.println("Test1.test1");
}
@Order(2)
@Test
@DisplayName("Test1 - test2()")
void test2() {
System.out.println("Test1.test2");
}
}
Given - When - Then 패턴
- 테스트 코드 스타일 중 하나이다.
- [ 준비 - 실행 - 검증 ]로 보면 이해하기 쉽다.
Given | 테스트에 필요한 변수, 값을 선언 |
When | 테스트하고자 하는 액션을 실제로 실행 |
Then | 발생할거라 예상되는 결과를 검증 |
@Test
@DisplayName("계산기 연산 성공 테스트")
void test1() {
// given
int num1 = 5;
String op = "/";
int num2 = 2;
// when
Double result = calculator.operate(num1, op, num2);
// then
assertNotNull(result);
assertEquals(2.5, result);
}
*참고
'자바(Java) > 스프링부트(SpringBoot)' 카테고리의 다른 글
[SpringBoot] 회원가입 예외처리 하기(statusCode:400) + 인텔리제이 디버깅 (0) | 2023.08.01 |
---|---|
[SpringBoot] 단위 테스트를 위한 Mockito? 그게 뭔데? (0) | 2023.07.26 |
[SpringBoot] Service단에서의 DTO <--> Entity의 변환. (0) | 2023.07.11 |
[SpringBoot] Entity란? + @Table, @NoArgsConstructor, @AllArgsConstructor (0) | 2023.07.10 |
[SpringBoot] 빌더 패턴의 “toEntity”와 “of” 메서드 (0) | 2023.07.04 |
Comments