Unit Test란?
유닛 테스트는 컴프터 프로그래밍에서 소스 코드의 특정 모듈이 의도된 대로 정확히 작동하는지 검증하는 절차다.
즉, 모든 함수와 메소드에 대한 테스트 케이스(Test case)를 작성하는 절차를 말한다.
이를 통해서 언제라도 코드 변경으로 인해 문제가 발생할 경우, 단시간 내에 이를 파악하고 바로 잡을 수 있도록 해준다.
이상적으로, 각 테스르 케이스는 서로 분리되어야 한다.
이를 위해 가짜 객체(Mock object)를 생성하는 것도 좋은 방법이다.
출처 - 유닛테스트 정의(위키피디아)
유닛 테스트는 작은 단위의 코드, 즉 함수나 모듈 들이 개별적인 요소에 대해 독립적으로 테스트를 수행하는 것을 말합니다. 소스 코드의 일부분을 유닛이라고 부르는데, 유닛 테스트를 통해 코드의 동작을 확인하고, 예상치 못한 버그를 사전에 발견할 수 있습니다. 따라서 유닛 테스트를 작성하면 코드의 신뢰도가 올라가고, 코드에 변경사항이 생겼을 때 기존 기능이 올바르게 작동하는지 빠르게 확인할 수 있다.
Unit Test 필요성
1. 버그 식별 및 조기 해결
- 유닛 테스트는 코드의 작은 부분을 테스트하기 때문에 버그를 식별하고 조기에 해결할 수 있습니다.
- 이는 전체 시스템이 통합된 후에 발생할 수 있는 심각한 문제를 방지할 수 있습니다.
2. 코드 변경의 안정성 유지
- 유닛 테스트는 코드 변경에 따른 영향을 신속하게 파악할 수 있도록 도와줍니다.
- 새로운 기능 추가나 기존 기능 수정 시, 해당 기능이 기대한 대로 동작하는지 확인할 수 있습니다.
3. 문서화와 설계 지원
- 유닛 테스트는 코드의 동작을 문서홯하고, 각 기능이 어떻게 동작해야 하는지 명시함으로써 코드의 설계를 지원합니다.
4. 재사용성 증대
- 각 유닛이 독립적으로 테스트되고, 상호 의존성이 줄어들기 때문에 해당 유닛을 다른 프로젝트나 모듈에서 재사용하기 쉬워집니다.
Unit Test 장점
1. 안정성 향상
- 유닛 테스트는 코드의 안정성을 향상시킵니다.
- 각 유닛이 테스트를 통과하면 해당 유닛이 예상한 대로 동작함을 보장할 수 있습니다.
2. 신속한 피드백
- 유닛 테스트는 빠르게 실행되므로 개발자는 코드를 변경할 때마다 신속하게 피드백을 받을 수 있습니다.
- 이는 개발자가 버그를 신속하게 발견하고 수정할 수 있도록 도와줍니다.
3. 자동화 기능
- 유닛 테스트는 자동화할 수 있으며, 이는 개발자가 테스트를 반복해서 실행하고 시간을 절약할 수 있게 해줍니다.
4. 코드 문서화
- 각 테스트 케이스는 코드의 예상 동작을 문서화하는 역할을 합니다.
- 이는 코드를 이해하고 유지보수하는 데 도움이 됩니다.
Unit Test 단점
1. 시간과 비용
- 유닛 테스트를 작성하고 유지하는 데에에는 시간과 비용이 소요됩니다.
- 특히, 프로젝트의 규모가 커질수록 이러한 비용은 증가할 수 있습니다.
2. 완전한 테스트 보장 불가능
- 모든 상황을 고려하여 완전한 테스트를 보장하는 것은 어렵습니다.
- 따라서 테스트 커버리지를 최대화하고 가능한 많은 시나리오를 고려하는 것이 중요합니다.
3. 의존성 관리 어려움
- 유닛 테스트는 각 유닛이 독립접으로 동작해야 하므로 외부 의존성을 적절히 관리해야 합니다.
- 이는 가짜 객체(Mock object)나 스텁(Stub)등의 기술을 사용하여 해결할 수 있습니다.
참고
https://toughie-ios.tistory.com/270
https://velog.io/@jxxnnee/Swift-Xcode%EC%97%90%EC%84%9C-%EB%8B%A8%EC%9C%84-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EB%94%B0%EB%9D%BC%ED%95%B4%EB%B3%B4%EA%B8%B0
https://ko.wikipedia.org/wiki/%EC%9C%A0%EB%8B%9B_%ED%85%8C%EC%8A%A4%ED%8A%B8