Unit Testing은 소프트웨어 테스팅의 한 종류입니다.
소프트웨어의 개별적인 유닛이나 컴퍼넌트들을 테스트합니다.
이 테스트의 목적은 각각의 유닛들이 기대하는 대로 작동하는지 테스트 하기 위한 것입니다.
Unit Testing은 개발하는 동안 수행됩니다.
Unit Test를 하는 것이 시간과 비용을 많이 요구하는 것처럼 보이지만 장기적인 관점에서 봤을 때 Unit Test를 하지 않은 것이 더 많은 비용과 시간을 요구하게 됩니다.

Unit Test가 왜 중요한지 정리해보겠습니다.
Unit Test는 빠르게 버그를 찾게 도와준다.
개발자들이 테스트 코드 베이스를 이해하고 변경을 빠르게 수행할 수 있도록 도와준다.
좋은 Unit Test는 좋은 프로젝트 문서화로 이어진다.
Unit test는 코드 재사용을 도와준다. 그리고 다른 곳에 재사용 할 때 신뢰할 수 있다.
일반적으로는 UnitTest 프레임워크를 사용합니다.
유닛 테스트에는 두 종류가 있습니다.
1. Manual에 따라 하는 방법
2. Automated하게 하는 방법
위 방법 중에 Automated한 방법을 더 선호하긴 합니다.
---추후 작성 예정---
유닛 테스트는 주로 3가지로 나뉩니다.
입력과 출력만 검증하는 블랙 박스 테스트.
소프트웨어 애플리케이션의 기능적 동작을 테스트하는 화이트 박스 테스트.
블랙 박스 테스트와 화이트 박스 테스트를 혼합한 그레이 박스 테스트.
Unit Test는 Test Driven Development를 위해 사용됩니다.
TDD의 특징은 아래와 같습니다.
1. 테스트를 코드를 작성하기 전에 작성한다.
2. testing framework에 크게 의존한다.
3. 애플리케이션의 모든 클래스가 테스트되어야 한다.
4. 빠르고 쉬운 통합이 가능해진다.
앞서 말했지만 Unit Test는 시간과 비용면에서 낭비된다고 생각하기 쉽습니다.
그러나 이는 사실이 아니고 실제로는 개발 속도를 빠르게 해줍니다.

Unit Test를 통한 기능 이해
개발자는 유닛 테스트를 통해 각 유닛이 제공하는 기능과 그 사용 방법을 기본적으로 이해할 수 있습니다.
유닛 테스트는 소프트웨어의 각 모듈이 제공하는 API에 대한 기본적인 이해를 제공하며, 개발자가 해당 유닛을 어떻게 사용해야 하는지를 보여줍니다.
Unit Test를 통한 리팩토링 및 회귀 테스트
Unit Test는 개발자가 나중에 코드를 리팩토링 할 수 있도록 해줍니다.
이후 모듈이 올바르게 작동하는지 확인할 수 있게 해줍니다. 이를 회귀 테스트라 합니다.
모든 함수와 메서드에 대한 테스트 케이스를 작성하기 때문에 이후 변경 사항이 결함을 유발할 때 이를 빠르게 식별하고 수정할 수 있습니다.
부분 테스트 가능
Unit Test는 프로젝트의 일부를 다른 부분의 완료를 기다리지 않고도 테스트 하게 해줍니다.