티스토리 뷰

TIL

TIL 220720 유닛 테스트에 대하여~

2021bong 2022. 7. 21. 01:13

유닛 테스트(Unit Test)란?

유닛 테스트(unit test)는 프로그래밍을 할 때 소스코드의 특정 모듈(메서드)이 의도된 대로 정확히 작동하는지 검증하는 하나의 모듈을 기준으로 독립적으로 진행되는 가장 작은 단위의 테스트이다. 여기서 모듈은 애플리케이션에서 작동하는 하나의 기능 또는 메소드, .js와 같은 파일로 이해할 수 있다.

 

TDD(Test-Driven Development, 테스트 주도 개발)에서 얘기하는 테스트도 단위 테스트를 의미한다.

 

유닛 테스트를 하는 이유?

전체적으로 말했을 때 유닛 테스트는 버그를 줄이고 코드 퀄리티를 높이기 위해 만든다.

 

통합 테스트는 실제 여러 컴포넌트들 간의 상호작용을 테스트하기 때문에 모든 컴포넌트들이 구동된 상태에서 테스트를 하게 된다. 그렇기에 통합 테스트를 위해서는 캐시나 데이터베이스 등 다른 컴포넌트들과 실제 연결을 해야 하고, 시스템을 구성하는 컴포넌트들이 많아질수록 테스트를 위한 비용(시간)이 상당히 커진다. 그래서 프로그램이 크고, 메모리가 많이 들고, 다른 리소스(데이터베이스 등)이 필요한 경우 로컬 환경에서 쉽게 코드를 실행시켜보기 어렵기 때문에 유닛테스트를 사용한다.

 

통합 테스트와 달리 단위 테스트는 해당 부분만 독립적으로 테스트하기 때문에 어떤 코드를 리팩토링하여도 빠르게 문제 여부를 확인할 수 있다. 그래서 새로운 기능 추가 시에 수시로 빠르게 테스트 할 수 있다.

 

디펜던시(Dependency)가 있는 다른 클래스들에서 버그가 나는것을 방지하기 위해서이다. Alphabet클래스에 의존하는 A클래스에서 버그가 났다. Alphabet이 문제인가 싶어 Alphabet을 고쳤다. A의 버그는 고쳐졌다. 그런데 A외에도 B나 C와 같은 다른 클래스도 Alphabet을 참조하고 있는데 Alphabet을 바꿔버리면 다른 클래스에도 영향을 미치게 된다. 다른 클래스들도 버그가 생겼는지 하나하나 테스트를 해봐야하는데 Alphabet에 의존하는 클래스들을 어떻게 찾을 것이며, 찾았다고 해도 그 수가 너무 많다면 어떻게 할 것인가?

이런 상황에서 유닛테스트를 사용하면 버그를 고치고 빌드(Build) 및 유닛 테스트 실행을 하는 순간 유닛 테스트가 Fail을 내놓을 것이다. 그리고 보다 쉽게 이 Alphabet에 의존하는 다른 클래스들을 확인할 수 있고, Alphabet에 정말 버그가 있는건지 아니면 내 가정이 잘못되었는지 확인할 수 있을 것이다.

 

그외에도 테스팅에 대한 시간과 비용을 절감할 수 있고, 리팩토링 시에 안정성을 확보할 수 있으며, 코드에 대한 문서가 될 수 있다는 장점이 있다.


유닛 테스트 라이브러리 JEST

Jest는 페이스북에서 만들어서 React와 더불어 많은 자바스크립트 개발자들로 부터 좋은 반응을 얻고 있는 테스팅 라이브러리이다.


Replit에 있는 문제를 풀다가 유닛 테스트가 있으니 확인해보라는 팝업이 뜨길래 테스트를 해봤다. 통과하지 못한 문제도 있어서 테스트 코드가 잘못된게 아닌가 싶어 해결방법을 찾아보며 유닛테스트에 대해 알아보게 되었다.

이리저리 구글링을 하다 콘솔에 뜬 오류의 이유까지 찾았는데 에러메세지를 다시 읽어보니 홀수를 짝수로 봐서 그냥 내가 문제를 틀린 것이었다. 그래도 해결 방법을 찾으려고 JEST 코드들을 봤더니 머릿속에 하나도 그려지지않았던 테스트 코드가 어떤식으로 작성되어서 작동하는지를 알게 되었다.

728x90
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
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
글 보관함