티스토리 뷰
단위테스트란?
단위테스트(Unit Test)는 가장 작은 하나의 모듈을 기준으로 독립적으로 진행 되는 테스트이다. 이는 하나의 클래스 혹은 메소드가 될 수 있다. 하나의 기능이 올바르게 동작하는지를 독립적으로 테스트 하는 것으로 어떤 기능을 실행했을 때 기대하는 결과가 나오는지 테스트하는 방법이다.
왜 작성해야 할까
작은 기능들이 하나 하나씩 모여 하나의 애플리케이션을 이루게 된다. 만약 기능들 중 하나라도 문제가 있다면 이는 애플리케이션 전체의 문제로 이어질 수 있다. 만약 단위테스트가 작성되었고 정상적으로 테스트를 통과한다면 다른 곳에서 이 기능을 가져다 쓸 때도 이미 테스트가 되었기에 이 기능에 대한 걱정은 하지 않아도 된다.
또한 단위테스트는 환경에 독립적으로 작성되기에 빠르게 실행할 수 있다는 장점이 있다. 모든 기능들을 테스트하는 통합테스트와 달리, 하나의 기능에 집중하며 의존하는 부분들은 가짜 객체(Mock)로 대체하여 온전히 본래의 기능에 집중할 수 있다.
또한 테스트 코드가 작성되어있다면 이후 기능을 확장할 때도 편리하다. 만약 새로운 기능을 추가 했는데 기존 기능이 잘 작동하는지 확인하려면 개발자가 직접 테스트하는 수 밖에 없다. 하지만 테스트가 작성되어 있다면 이 테스트를 돌려보는 것 만으로 내가 추가한 기능이 기존 기능을 해치지 않는지 쉽게 확인할 수 있다.
Junit5, AssertJ
자바에서 단위테스트를 위한 테스팅 프레임워크이다. 위 프레임워크들을 이용하면 테스트를 보다 쉽고 정확하게 할 수 있다.
테스트 작성
테스트를 어떻게 작성해야할 지 모르면 이렇게 작성해보자.
- given : 이런 데이터가 주어졌을 때
- when : 이런 함수를 실행하면
- then : 이런 결과가 나와야 한다.
위 규칙에 맞게 작성하면 짜임새 있는 테스트를 작성할 수 있다.
import org.junit.jupiter.api.Test;
public class Example {
@Test
void test() {
//given
//when
//then
}
}
테스트는 이렇게 메소드 위에 @Test
어노테이션을 붙이면 된다.
다음은 nickname
과 character
를 필드로 가지는 User
객체 생성에 대한 테스트이다.
@Test
@DisplayName("유저 생성")
void createUser() {
//given
String nickname = "test";
String character = "character1";
//when
User user = new User(nickname, chracter);
//then
assertThat(user.getNickname()).isEqualTo(nickname);
assertThat(user.getCharacter()).isEqualTo(character);
}
이런식으로 내가 입력한 값과, 메소드의 실행결과가 일치하는지 확인하면 된다.
위에서 사용한 assertThat
함수는 AssertJ
라이브러리를 임포트하여 사용할 수 있다. 이렇게 말이다.import static org.assertj.core.api.Assertions.assertThat;
만약 테스트하고자 하는 클래스에서 의존하고 있는 객체가 있다면 이때는 가짜 객체(mock object)를 주입하여 다른 객체에 의존하지 않는 테스트를 만드는 것이 좋다.
'Spring' 카테고리의 다른 글
[Spring] 스프링 필터와 인터셉터(Filter, Interceptor) (0) | 2022.05.09 |
---|---|
[Spring] 스프링 프레임워크 구동 순서 (Java Config) (0) | 2022.04.21 |
[SpringBoot] 예외처리 방법 (@ControllerAdvice, @ExceptionHandler) (0) | 2022.04.08 |
[SpringBoot] 스프링부트 WebSocket(웹소켓) 사용하기 (0) | 2022.03.29 |
- Total
- Today
- Yesterday
- 세그먼트 트리
- 투포인터
- java
- ReactNative
- BFS
- 그래프
- 동적계획법
- 자바스크립트
- 중앙대학교
- 백준
- 벨만포드
- typeORM
- 시뮬레이션
- 알고리즘
- boj
- 스레드
- 컴퓨터 구조
- nestjs
- Computer Architecture
- 예외처리
- 자바
- node.js
- 구현
- 백트래킹
- 그리디
- dfs
- nodeJS
- 재귀
- nest.js
- 컴퓨터 통신
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |