📌 단위 테스트
◾ 단위 테스트란?
- 프로그래밍에서 소스 코드의 특정 모듈이 의도된 대로 정확히 작동하는지 검증하는 절차이며, 메서드를 테스트하는 또 다른 메서드이다.
- 테스트 대상 단위 크기를 작게 설정해서 단위 테스트를 최대한 간단하고 디버깅하기 쉽게 작성해야 한다.
- Java는 JUnit 으로 테스트 한다.
◾ 단위 테스트를 하는 이유
버그를 줄이고, 코드의 퀄리티를 높이며 문제점 발견, 변경 및 통합이 간단하다.
- 프로그램을 작은 단위로 쪼개서 각 단위가 정확하게 동작하는지 검사하기 때문에 (클래스 또는 메소드 수준) 코드에 문제가 생기는 경우 단시간 내에 이를 파악하고 바로 잡을 수 있도록 해준다.
- 테스트를 잘 갖춰 놓으면 단위 테스트 자체가 코드 사용법을 알려주는 문서가 된다.
◾ 단위 테스트를 하는 방법
👉 필요한 라이브러리
- JUnit5 : 자바 단위 테스트를 위한 프레임워크
- AssertJ : 자바 테스트를 돕기 위해 다양한 문법을 지원하는 라이브러리
→ JUnit 만으로도 단위 테스트를 작성 할 수 있으나 편의성을 위해 AssertJ 도 함께 쓴다.
👉 Given - When - Then 패턴
- Given : 뭔가가 주어져
- When : 실행했을 때
- Then : 이러한 결과가 나와야 한다.
👉 @Test 를 이용하여 메서드 생성
Class MemberSerViceTest {
@Test
void join(){
//given
//when
//then
}
}
- @Test
: 해당 메서드가 단위 테스트임을 명시하는 어노테이션
- 그냥 실행 시 함수 이름이 default로 지정된다.
이름을 부여 하고 싶다면 @DisplayName 어노테이션을 사용하거나 메서드 이름을 한글로 지정해도된다.
→ 실제 실행되는 코드에서는 여러 오류 발생을 염려해 한글 이름 명명을 잘 하지 않지만 테스트코드는 상관없다고 한다.
Class MemberSerViceTest {
@DisplayName("회원가입테스트")
@Test
void join(){
//given
//when
//then
}
}
Class MemberSerViceTest {
@Test
void 회원가입(){
//given
//when
//then
}
}
👉 단위 테스트 작성
참고 게시글
[인프런] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 #12 - 회원 서비스 테스트
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8/dashboard 1. 편하게 Test 생성 하는법 Class 에서 단축키 Ctrl + Shift + T 를 누르면 새 테스트 생성 가능 테
sm-lee2026210.tistory.com
MemberService memberService = new MemberService();
@Test
void 회원가입() {
//given-when-then 문법
//given
Member member = new Member();
member.setName("kim");
//when :memberService.join 에 member 객체를 넣어서 검증하여
// saveId로 리턴 (저장한 ID가 나옴)
Long saveId = memberService.join(member);
//then
Member findMember = memberService.findOne(saveId).get();
Assertions.assertThat(member.getName()).isEqualTo(findMember.getName());
}
- 메서드 마다 작성을 해 주어야한다.
- 위 코드의 경우 member.setName("Kim");
을 하여 멤버 이름을 Kim으로 설정하고 ID를 save한다.
→ 아이디를 save 하면 memberID 가 자동으로 생성된다.
- 그랬을 때 동일 memberID가 있는지 확인하는 findMember를 실행하여 set하였던 Name과 find하였던 Name을 비교한다.
실행 시 오류가 발생하지 않으면 초록불이 나오고 실패 시 빨간 불이 뜬다.
- 오류 내용도 확인이 가능하다.
◾ FIRST 규칙
- Fast: 테스트는 빠르게 동작하여 자주 돌릴 수 있어야 한다.
- Independent: 각각의 테스트는 독립적이며 서로 의존해서는 안된다.
- Repeatable: 어느 환경에서도 반복 가능해야 한다.
- Self-Validating: 테스트는 성공 또는 실패로 bool 값으로 결과를 내어 자체적으로 검증되어야 한다.
- Timely: 테스트는 적시에 즉, 테스트하려는 실제 코드를 구현하기 직전에 구현해야 한다.
테스트를 작성 하는 경우 1개의 테스트 함수에 assert를 최소화 하고, 1개의 테스트 함수에는 1가지 개념만 테스트 해야한다.
◾ 단위 테스트의 문제점
- 단위 테스트를 통해 버그 없이 잘 돌아간다는 뜻은 아니다.
- 단위 테스트의 경우 해당 모듈에 대한 독립적인 테스트이기 때문에 다른 객체들과 메세지를 주고받는 경우 문제가 발생한다.
( 하나의 메서드가 잘 동작 하더라도 로직에 따라 버그가 있을 수 있다. )
- 위의 경우 다른 테스트 방법을 통해 추가 테스트를 진행해야 한다.
💌 Reference
- https://tecoble.techcourse.co.kr/post/2021-05-25-unit-test-vs-integration-test-vs-acceptance-test/
- https://soozl91.tistory.com/64
- https://imasoftwareengineer.tistory.com/88
- https://mangkyu.tistory.com/143
- https://mangkyu.tistory.com/144
'스터디 > 테크톡' 카테고리의 다른 글
[테크 톡 - 14주차] DTO와 VO (0) | 2023.09.13 |
---|---|
[테크 톡 - 13주차] Git의 브랜치 전략 (0) | 2023.08.25 |
[테크 톡 - 11주차] Spring & Spring Boot (0) | 2023.08.10 |
[테크 톡 - 10주차] HTTPS (0) | 2023.08.10 |
[테크 톡 - 9주차] 쿠키와 세션 (0) | 2023.08.10 |