대형 멀티 플랫폼 응용 프로그램을 빌드 할 때 단위 테스트를 강력하게 사용합니다. 현재 우리는 별도의 프로젝트 내에서 단위 테스트를 수행 할 계획입니다. 이렇게하면 코드 기반을 깨끗하게 유지할 수 있습니다. 그러나 이것이 테스트 코드를 유닛 구현과 분리 할 것이라고 생각합니다. 이 접근 방식에 대해 어떻게 생각하고 있으며 C++ 응용 프로그램 용 JUnit과 같은 도구가 있습니까?대규모 C++ 프로젝트에서 단위 테스트를 어떻게 구현합니까?
답변
합리적인 방법입니다.
나는 모두 UnitTest++ 내가 CppUnit을 검토 한
Boost.Test 매우 좋은 결과를 했어,하지만 나에게, 그것은 더 ++ C 목표 일보다 JUnit을 물건의 번역처럼 느꼈다.
업데이트 : 요즘은 Catch을 사용하는 것이 좋습니다. 효과적이고 사용하기 쉽다는 것을 알게되었습니다.
[doctest] (https://github.com/onqtam/doctest)는 나의 재 구현입니다. 컴파일 속도에 중점을두고 캐치 - [FAQ] (https://github.com/onqtam/doctest/blob/master/doc/markdown/faq.md#how-is-doctest-different-from-catch)를 확인하십시오.) 어떤 점에서 다른지 확인하려면 – onqtam
CppUnit을은 C++ 응용 프로그램을 개인적으로 http://cppunit.sourceforge.net/cppunit-wiki
에 대한의 JUnit 직접 해당합니다, 나는 다른 프로젝트에 단위 테스트를 생성하고, 모든 단위 테스트와 종속 소스 코드를 내장 별도의 빌드 구성을 만들었습니다. 어떤 경우에는 클래스의 private 멤버 함수를 테스트하여 Test 클래스를 테스트 할 객체의 friend 클래스로 만들었지 만 선처리 선언을 통해 "비 테스트"구성으로 빌드 할 때 friend 선언을 숨 겼습니다.
그러나 레거시 코드에 테스트를 통합 할 때 이러한 코딩 체조가 발생했습니다. 단위 테스트의 목적으로 시작한다면 더 나은 설계가 간단 할 것입니다.
소스 트리의 각 라이브러리에 대한 단위 테스트 프로젝트를 해당 라이브러리의 하위 디렉토리에 만들 수 있습니다. 결국 각 라이브러리에 대한 테스트 드라이버 응용 프로그램이 만들어지기 때문에 단일 테스트 집합을 더 쉽게 실행할 수 있습니다. 코드를 하위 디렉토리에두면 코드를 깨끗하게 유지할 수있을뿐 아니라 테스트를 코드와 가깝게 유지할 수 있습니다.
소스 트리에서 모든 테스트 스위트를 실행하고 결과를 수집하도록 스크립트를 쉽게 작성할 수 있습니다.
저는 커다란 성공을 거둔 오리지날 CppUnit의 맞춤형 버전을 사용하고 있지만 다른 대안이 있습니다. GoogleTest가 흥미로운 것 같습니다.
제품 테스트를 통해 올바른 방향으로 제품을 테스트하고 제품의 신뢰성을 향상시킬 수있는 훌륭한 계획이라고 생각합니다.
응용 프로그램을 다른 플랫폼 또는 다른 운영 체제로 변환 할 때 단위 테스트로 모든 문제를 해결할 수는 없지만. 그 이유는 프로세스 단위 테스트가 애플리케이션의 버그를 발견하기 때문입니다. 단지 시스템에 상상할 수있는 많은 입력을 던지고 다른 끝에서 결과를 기다립니다. 마치 키보드로 끊임없이 파운드를 보내고 결과를 관찰하는 것과 같습니다 (베타 테스터).
좋은 단위 테스트를 통해 다음 단계로 진행하려면 응용 프로그램의 내부 설계에 집중해야합니다. 내가 아는 가장 좋은 방법은 "계약 프로그래밍"또는 "계약에 의한 설계"라고 불리는 디자인 패턴 또는 디자인 프로세스를 사용하는 것이 었습니다. 핵심 설계에 신뢰성을 높이는데 도움이되는 다른 책이있었습니다.
개발 프로세스 디버깅 : 집중력을 유지하고, 선박 날짜를 맞추며, 솔리드 팀을 구축하는 실용적인 전략.
개발 팀에서는 프로그래머 오류, 개발자 오류, 설계 오류, 그리고 단위 테스트와 DBC를 통한 소프트웨어 패키지의 신뢰성 구축 방법을 매우 자세히 검토했습니다. 개발 프로세스 디버깅
CxxTest 또한 C++ 용 JUnit/CppUnit/xUnit과 같은 가벼운 플랫폼을 사용하는 것이 좋습니다. 우리는 ++은 매우 간단 추가하고 많은 테스트 단위 frameforks는 C에 대한 있습니다 가치가 다른 C++ 테스트 프레임 워크
으로 내가 유닛 테스트를 사용 ++. 테스트는 별도의 프로젝트에 있지만 실제 테스트는 실제 코드와 얽혀 있습니다. 테스트중인 섹션 아래의 폴더에 있습니다. 예 :
에 MyProject \ SRC < \ - 실제 응용 프로그램
에 MyProject의 소스 \ SRC \이 < 테스트 - 테스트의 소스
당신은 폴더를 중첩 한 (누가되지 않습니다) 그들은 너무있을 경우 자신의 own \ tests 하위 디렉토리.
동일한 작업을 수행하며 빌드 시스템이 자동으로 테스트를 작성합니다 어떤 unittest 소스 폴더에서 발견되는 코드의 EXE 파일. –
tut를 사용하여 http://tut-framework.sourceforge.net/ 매우 간단하고 헤더 파일에만 매크로가 없습니다. XML 결과 생성 가능
기본 코드를 공유 (동적) 라이브러리로 분리 한 다음이 라이브러리에 대한 단위 테스트의 주요 부분을 작성해야합니다.
2 년 전 (2008) Linux Foundation에서 배포 한 대규모 LSB 인프라 프로젝트에 참여했습니다. 이 프로젝트의 목적 중 하나는 Linux 핵심 라이브러리에서 40,000 개의 함수에 대한 단위 테스트를 작성하는 것이 었습니다. 이 프로젝트의 맥락에서 우리는 모든 테스트를 자동으로 생성하기 위해 AZOV technology과 API Sanity Autotest이라는 기본 도구를 만들었습니다. 이 도구를 사용하여 기본 라이브러리에 대한 단위 테스트를 생성 할 수 있습니다.
- 1. 루비에서 단위 테스트를 어떻게 분할해야합니까?
- 2. Visual Studio에서 별도의 폴더/프로젝트에서 (단위) 테스트를 어떻게 실행합니까?
- 3. 어떻게 단위 테스트를 패키지로 구성합니까?
- 4. 단위 테스트를 찾는 방법
- 5. 대용량 Grails 프로젝트에서 통합 및 단위 테스트
- 6. Spring 프로젝트에서 시스템 테스트를 포함해야합니까?
- 7. 단위 테스트를 실행하는 MSBuild
- 8. 파이썬 프로젝트에서 단위 테스트를 호출하는 데 일반적으로 사용되는 규칙은 무엇입니까?
- 9. 단위 테스트를 통합 테스트와 어떻게 분리합니까?
- 10. 스트럿츠 2에 대한 단위 테스트를 어떻게 작성합니까?
- 11. 단위 테스트를 사용하는 PHP 디버거
- 12. GPU (Geforce 9800)는 비트 단위 정수 연산을 어떻게 구현합니까?
- 13. 대형 프로젝트에서 단위 테스트에 접근하는 방법
- 14. DAO (단위 저장소)는 단위 테스트를 받아야합니까?
- 15. IronPython에서 인터페이스를 어떻게 구현합니까?
- 16. SQLRepository에 대해서 단위 테스트를 실행해야합니까?
- 17. 대규모 프로젝트에서 가장 좋은 IoC 사례
- 18. 단위 테스트를 위해 NUnit과 MSTest를 전환하는 중
- 19. C#에서 sdbm 해시 함수를 어떻게 구현합니까?
- 20. C#에서 제네릭 스택을 어떻게 구현합니까?
- 21. 어떻게 C++에서 다형성을 내부적으로 구현합니까?
- 22. C#에서 피아노 건반 기능을 어떻게 구현합니까?
- 23. C++ : 어떻게 자신의 String 클래스를 구현합니까?
- 24. 단위 테스트를 어떻게 실행합니까? 컴파일러 플래그? 정적 라이브러리?
- 25. 단위 테스트는 어떻게 문서화해야합니까?
- 26. 이 단위 테스트를 제대로하고 있습니까?
- 27. Maven : 단위 테스트를 원격으로 실행
- 28. 단위 테스트를 위해 SimpleHTTPServer 사용하기
- 29. Silverlight 단위 테스트를 실행하는 NullReferenceException
- 30. CPPUnit에서 단위 테스트를 끄는 방법
매우 비슷한 질문이 있습니다. [CppUnit] (http://cppunit.sourceforge.net), [CppUnitLite] (http://www.objectmentor.com/resources/downloads.html) 및 "[기존 코드로 효과적으로 작업하기] (http : /www.amazon.co.uk/Working-Effectively-Legacy-Robert-Martin/dp/0131177052) "(모두 by Michael Feathers –