JUnit

자바와 JVM 계열의 언어(예 : 코틀린)에서 사용하는 단위 테스트 프레임워크를 말한다.

 

단위 테스트(Unit Test)

소스코드의 특정 모듈(프로그램 내 하나의 기능을 부르는 말)이 의도된 대로 정확히 작동하는지 검증하는 절차이며,

함수, 메서드, 개별 코드 같은 작은 단위에 대해 테스트 케이스(Test Case)로 분리하고 테스트 코드를 작성하여 테스트하는 것을 말한다.

외부 API와의 연동이 필수라든가 DB 데이터 접근 등 외부 리소스를 직접 사용해야 하는 테스트라면 단위 테스트가 아니다. 단위 테스트에서 외부와의 연동이 필요하다면 테스트 대역(Test Double)을 사용하면 된다.  

 

💡 다른 언어도 단위 테스트를 위한 프레임워크가 존재하며 보통 이름을 xUnit이라 칭한다.

예 : CppUnit(C++), NUnit(.NET 프레임워크), unittest(파이썬)

 

💡 테스트 대역(Test Double)

외부 의존 구성요소를 사용할 수 없거나 직접 사용하고 싶지 않을 때, 테스트 대상 코드와 대신해서 상호작용하는 객체를 말한다.

 

단위 테스트(Unit Test) < 통합 테스트(Integration Test) < 기능 테스트(Functional Test) 

통합 테스트

모듈을 통합하는 과정에서 모듈 간 인터페이스가 올바르게 작동하는지를 테스트하는 것이다.

 

일반적인 웹 어플리케이션은 프레임워크, 라이브러리, 데이터베이스, 구현한 코드가 주요 통합 테스트 대상이다. 예를 들어 회원 가입 코드에 대한 통합 테스트를 수행하면 스프링 프레임워크나 마이바티스 설정이 올바른지, SQL 쿼리문이 맞는지, DB 트랜잭션이 잘 동작하는지 등을 검증할 수 있다.

 

여러 모듈간 통합을 거치기 때문에 단위 테스트에 비해 테스트 실행 속도가 느린 편이다. 

 

💡 SQL(Structured Query Language)

데이터베이스에 정보를 요청하는 언어를 말한다.

 

💡 트랜잭션(Transactcion)

데이터베이스의 상태를 변화시키기 해서 수행하는 작업의 단위를 뜻한다.

 

기능 테스트

사용자와 어플리케이션의 상호작용이 원활하게 이루어지는지 테스트하는 것이다.
그래서 이 테스트를 수행하려면 시스템을 구동하고 사용하는데 필요한 모든 구성요소가 필요하다.

따라서 E2E(End to end) 테스트로도 볼 수 있다. 예를 들면 브라우저에 웹 서버를 구동하거나 모바일에 앱을 구동하고 화면의 흐름에 따라 알맞은 상호 작용을 해야 하는 것이다.

 

단위 테스트의 장점

테스트 시간 단축으로 문제점 발견 가능성이 높아지고 안정성이 향상

단위 테스트의 목적은 프로그램의 각 부분을 고립시켜서 각각의 부분이 정확하게 동작하는지 확인하는 것이다. 이를 통해 문제 발생 시 정확하게 어느 부분이 잘못되었는지를 재빨리 확인할 수 있게 해 준다. 따라서 프로그램의 안정성이 높아진다. 단위 테스트는 개발 시간을 증가시키는 것처럼 보이지만 개발 기간 중 대부분을 차지하는 디버깅 시간을 단축시킴으로써 여유로운 프로그래밍을 가능케 한다.

 

이전 기능도 함께 테스트하기 때문에 더 쉬워진 코드 변경

프로그래머는 단위 테스트를 믿고 리팩토링을 할 수 있다. 리팩토링 후에도 해당 모듈이 의도대로 작동하고 있음을 단위 테스트를 통해서 확신할 수 있다. 이를 회귀 테스트(Regression Testing)라 한다. 어떻게 코드를 고치더라도 문제점을 금방 파악할 수 있고 수정된 코드가 정확하게 동작하는지 쉽게 알 수 있게 되므로 프로그래머들은 더욱더 의욕적으로 코드를 변경할 수 있게 된다.

테스트 간 결합도가 낮으므로 간단해진 통합

단위 테스트는 단위 자체의 불확실성을 제거해주므로 상향식(Bottom-up) 테스트 방식에서 유용하다. 먼저 프로그램의 각 부분을 검증하고 그 부분들은 합쳐서 다시 검증하는 통합 테스트에서 더욱더 빛을 발한다.

 

JUnit의 장점

  • 테스트 결과는 테스트 클래스로 작성하여 개발자에게 테스트 방법 및 클래스의 히스토리를 남기고 공유가 가능
  • 단정(Assert) 메서드로 테스트 케이스의 수행 결과를 판별
  • 어노테이션(Annotation)으로 간결하게 지원

💡 JUnit의 대표적인 단정(Assert)메서드와 어노테이션에 대해 궁금하신 분들은 별도의 포스팅을 참고 바란다.


출처

단위 테스트, 통합 테스트, 기능 테스트

cjwoov.tistory.com/9

 

단위 테스트 작성 이유

docs.microsoft.com/ko-kr/dotnet/core/testing/unit-testing-best-practices