Unittest
unittest는 파이썬의 표준 라이브러리에 포함된 단위 테스트 프레임워크.
이 프레임워크는 소프트웨어 개발에서 개별 코드 단위의 정확성을 검증하는 데 사용된다.
주요 특징
- 테스트 자동화: unittest는 테스트 케이스를 자동으로 실행하고 결과를 보고한다.
- 테스트 독립성: 각 테스트는 독립적으로 실행되며, 다른 테스트의 결과에 영향을 받지 않는다.
- 테스트 픽스처: setUp()과 tearDown() 메서드를 통해 테스트 전후 환경을 설정하고 정리할 수 있다.
- 단언(Assertions): 다양한 assert 메서드를 제공하여 예상 결과와 실제 결과를 비교할 수 있다.
테스트 케이스 작성
unittest는 unittest.TestCase
를 상속하는 클래스를 통해 테스트를 구성한다.
이러한 클래스 기반 접근방식은 다음과 같은 장점을 제공한다:
- 관련된 테스트들을 논리적으로 그룹화할 수 있다.
- 테스트 간에 공통된 설정과 정리 코드를 공유할 수 있다.
- 테스트 컨텍스트를 명확하게 관리할 수 있다.
설정과 정리 메서드
unittest는 여러 수준의 설정과 정리 메서드를 제공한다:
setUp()
: 각 테스트 메서드 실행 전에 호출tearDown()
: 각 테스트 메서드 실행 후에 호출setUpClass()
: 테스트 클래스 실행 전에 한 번 호출tearDownClass()
: 테스트 클래스 실행 후에 한 번 호출
이러한 메서드들은 테스트에 필요한 환경을 준비하고 정리하는데 사용된다.
단언문(Assertions)
unittest는 다양한 검증 메서드를 제공한다:
assertEqual(a, b)
: a와 b가 같은지 검증assertNotEqual(a, b)
: a와 b가 다른지 검증assertTrue(x)
: x가 True인지 검증assertFalse(x)
: x가 False인지 검증assertRaises(exc, func, *args)
: 예외 발생 검증assertAlmostEqual(a, b)
: 부동소수점 비교assertIn(a, b)
: 멤버십 테스트assertIsInstance(a, b)
: 타입 검증
테스트 실행 제어
unittest는 테스트 실행을 제어하는 여러 기능을 제공한다:
@unittest.skip()
: 테스트 건너뛰기@unittest.skipIf()
: 조건부 테스트 건너뛰기@unittest.skipUnless()
: 조건부 테스트 실행@unittest.expectedFailure
: 실패 예상 테스트
테스트 결과 보고
unittest는 테스트 실행 결과를 다음과 같이 보고한다:
- 성공한 테스트는 ‘.‘으로 표시
- 실패한 테스트는 ‘F’로 표시
- 에러가 발생한 테스트는 ‘E’로 표시
- 건너뛴 테스트는 ‘S’로 표시
장점
- 표준 라이브러리: 별도의 설치 없이 바로 사용 가능하다.
- 자동화된 테스트: 테스트 실행과 결과 보고가 자동화되어 있다.
- 테스트 구조화: 테스트 케이스와 테스트 스위트를 통해 테스트를 체계적으로 구성할 수 있다.
단점
- 문법의 복잡성: 다른 테스트 프레임워크에 비해 상대적으로 복잡한 문법을 가지고 있다.
- 제한된 기능: 일부 고급 기능은 제3자 라이브러리를 통해 보완해야 한다.
기본 구조
unittest를 사용한 테스트 코드의 기본 구조는 다음과 같다:
사용 예제
|
|
모범 사례와 권장사항
- 테스트 케이스 구성
- 각 테스트 메서드는 하나의 기능만 테스트
- 테스트 메서드 이름은 명확하게 작성
- 관련된 테스트들을 같은 클래스에 그룹화
- 독립성 유지
- 각 테스트는 독립적으로 실행 가능해야 함
- 테스트 간 의존성 피하기
- setUp과 tearDown을 적절히 활용
- 예외 처리
- 예외 테스트는 assertRaises 사용
- 예외 메시지도 함께 검증
- 적절한 컨텍스트 관리