상황에 가장 적합한 단위 테스트 프레임 워크를 결정하는 많은 변수가 있습니다. 선택에 영향을 줄 수있는 일부 항목은 다음과 같습니다.
- 대상 언어
- 사용 가능한 라이브러리 지원 예를 들어 libc 또는 이의 컷 다운 버전.
- 대상의 운영 체제 예 : 없음, FreeRTOS, 사용자 지정
대부분의 xUnit 유형 프레임 워크는 유용한 기본 기능을 제공합니다. 나는 과거에 Cunit 을 약간의 성공으로 사용했습니다. (Ubuntu / Debian의 libcunit1-dev 패키지). 대부분의 프레임 워크는 libc를 사용할 수 있어야하고 일부는 추가 OS 지원이 필요합니다.
길이가 3 줄인 또 다른 대안은 Minunit 입니다.
테스트를 다운로드하고 실행 한 다음 결과를 얻는 데 적합한 환경을 제시 할 수 있어야하기 때문에 마이크로 컨트롤러를 대상으로 사용하는 단위 테스트가 상당히 번거로운 것으로 나타났습니다. 이 작업을 수행 할 수있는 플랫폼을 확보하는 것은 큰 작업입니다.
내가 취한 또 다른 접근법은 호스트에서 단위 테스트를 수행하여 드라이버와 응용 프로그램 코드 사이에 추상화 계층을 구현하는 것입니다. 대상에 gcc를 사용하고 있으므로 코드도 호스트에서 컴파일해야합니다.
호스트 OS와 모든 도구를 완벽하게 지원하므로 컴파일 호스트에서의 테스트는 일반적으로 훨씬 쉽습니다. 예를 들어, 호스트에서 테스트 할 때 대상에서 실행되는 실제 드라이버와 동일한 인터페이스를 가진 모형의 무선 드라이버 버전이 있습니다. 호스트 버전은 UDP 패킷을 사용하여 무선 패킷 전송을 시뮬레이션하며, 프로토콜을 테스트 할 수 있도록 패킷을 삭제하는 기능을 지원하는 모의 드라이버와 함께 제공됩니다.
내가 작업했던 제품에서는 스레드 OS가 사용 되었기 때문에 호스트 OS 테스트를위한 추상화 계층이 대신 pthread를 사용했습니다.
완벽하지는 않지만 테스트를 작성하고 실행하기가 더 쉬울수록 더 많은 테스트 사례를 구현할 가능성이 높습니다. 다른 플랫폼에서 코드를 실행하는 또 다른 이점은 코드가 이식 가능한지 테스트하는 것입니다. 대상 아키텍처와 호스트 아키텍처가 다른 경우 엔디안 실수를 신속하게 파악할 수 있습니다.
나는 이제 조금 벗어난 주제이지만, 이러한 아이디어가 테스트 프레임 워크 및 테스트 방법 선택에 도움이 될 수 있다고 생각합니다.