대규모 C++ 프로젝트에서 단위 테스트를 어떻게 구현합니까?[닫은]

StackOverflow https://stackoverflow.com/questions/91683

  •  01-07-2019
  •  | 
  •  

문제

저는 대규모 다중 플랫폼 애플리케이션 구축의 일부로 단위 테스트를 사용하는 것이 좋다고 믿습니다.현재 별도의 프로젝트 내에서 단위 테스트를 진행할 계획입니다.이는 코드 베이스를 깨끗하게 유지하는 이점이 있습니다.하지만 이렇게 하면 테스트 코드와 유닛 구현이 분리될 것이라고 생각합니다.이 접근 방식에 대해 어떻게 생각하시나요? C++ 애플리케이션용 JUnit과 같은 도구가 있나요?

도움이 되었습니까?

해결책

C++용 테스트 유닛 프레임포크가 많이 있습니다.CppUnit은 확실히 제가 선택하는 것이 아닙니다(적어도 안정적인 버전 1.x에서는 많은 테스트가 부족하고 중복된 코드 줄이 많이 필요하기 때문입니다).지금까지 내가 선호하는 프레임워크는 다음과 같습니다. Cxx테스트, 평가할 계획입니다 과당 타일.

어쨌든 C++ TU 프레임워크를 평가하는 몇 가지 "논문"이 있습니다.

다른 팁

그것은 합리적인 접근 방식입니다.

나는 둘 다 매우 좋은 결과를 얻었습니다 유닛테스트++ 그리고 부스트.테스트

CppUnit을 살펴봤지만 나에게는 C++를 겨냥한 것보다 JUnit을 번역한 것 같은 느낌이 들었습니다.

업데이트: 요즘은 사용하는 걸 더 좋아해요 잡다.나는 그것이 효과적이고 사용하기 쉽다는 것을 알았습니다.

기본 코드를 공유(동적) 라이브러리로 분리한 다음 이 라이브러리에 대한 단위 테스트의 주요 부분을 작성해야 합니다.

2년 전(2008년) 저는 Linux Foundation에서 배포한 대규모 LSB 인프라 프로젝트에 참여했습니다.이 프로젝트의 목표 중 하나는 Linux 핵심 라이브러리에서 40,000개 기능에 대한 단위 테스트를 작성하는 것이었습니다.이 프로젝트의 맥락에서 우리는 아조프 기술 그리고 기본 도구 이름은 API 온전성 자동 테스트 모든 테스트를 자동으로 생성합니다.이 도구를 사용하여 기본 라이브러리에 대한 단위 테스트를 생성해 볼 수 있습니다.

저는 UnitTest++를 사용합니다.테스트는 별도의 프로젝트에 있지만 실제 테스트는 실제 코드와 얽혀 있습니다.테스트 중인 섹션 아래의 폴더에 존재합니다.즉:
MyProject\src\ <- 실제 앱 소스
MyProject\src ests <- 테스트 소스
중첩된 폴더가 있는 경우(그리고 그렇지 않은 경우) 해당 폴더에도 자체 ests 하위 디렉터리가 있습니다.

Cppunit은 C++ 애플리케이션용 Junit과 직접적으로 동일합니다.http://cppunit.sourceforge.net/cppunit-wiki

개인적으로 저는 다른 프로젝트에서 단위 테스트를 만들고 모든 단위 테스트와 종속 소스 코드를 빌드하는 별도의 빌드 구성을 만들었습니다.어떤 경우에는 클래스의 비공개 멤버 함수를 테스트하고 싶어서 Test 클래스를 테스트할 객체에 대한 friend 클래스로 만들었지만 전처리기 선언을 통해 "비테스트" 구성을 구축할 때 friend 선언을 숨겼습니다.

그러나 테스트를 레거시 코드에 통합하면서 이러한 코딩 체조를 수행하게 되었습니다.단위 테스트를 목적으로 시작하는 경우 더 나은 디자인은 간단할 수 있습니다.

해당 라이브러리의 하위 디렉터리에 있는 소스 트리의 각 라이브러리에 대한 단위 테스트 프로젝트를 만들 수 있습니다.각 라이브러리에 대한 테스트 드라이버 애플리케이션이 생성되므로 단일 테스트 모음을 더 쉽게 실행할 수 있습니다.하위 디렉터리에 배치하면 코드 베이스가 깔끔하게 유지될 뿐만 아니라 테스트도 코드에 가깝게 유지됩니다.

소스 트리의 모든 테스트 스위트를 실행하고 결과를 수집하기 위해 스크립트를 쉽게 작성할 수 있습니다.

나는 수년 동안 원래 CppUnit의 사용자 정의 버전을 사용해 큰 성공을 거두었지만 지금은 다른 대안이 있습니다. 구글테스트 흥미로워 보이네요.

나는 귀하가 단위 테스트를 통해 올바른 길을 가고 있다고 생각하며 이는 제품의 신뢰성을 향상시키기 위한 훌륭한 계획입니다.

단위 테스트가 애플리케이션을 다른 플랫폼이나 다른 운영 체제로 변환할 때 모든 문제를 해결하지는 않습니다.그 이유는 애플리케이션의 버그를 발견하기 위해 프로세스 단위 테스트를 거치기 때문입니다.단지 상상할 수 있는 만큼의 입력을 시스템에 입력하고 다른 쪽 끝에서 결과를 기다립니다.원숭이가 키보드를 계속 두드리게 하고 결과를 관찰하는 것과 같습니다(베타 테스터).

다음 단계로 나아가려면 좋은 단위 테스트를 통해 애플리케이션의 내부 디자인에 집중해야 합니다.내가 찾은 가장 좋은 접근 방식은 "계약 프로그래밍" 또는 "계약에 따른 디자인"이라는 디자인 패턴이나 디자인 프로세스를 사용하는 것이었습니다.핵심 설계에 신뢰성을 구축하는 데 매우 도움이 되는 또 다른 책은 다음과 같습니다.

개발 프로세스 디버깅:집중력 유지, 배송 날짜 맞추기, 탄탄한 팀 구축을 위한 실용적인 전략.

개발 팀에서는 프로그래머 오류, 개발자 오류, 설계 오류로 간주되는 사항과 단위 테스트를 모두 사용할 수 있는 방법과 DBC를 통해 소프트웨어 패키지에 신뢰성을 구축하고 개발 디버깅에 대한 조언을 따르는 방법을 매우 자세히 살펴보았습니다. 프로세스.

혀를 사용하여 http://tut-framework.sourceforge.net/매우 간단합니다. 헤더 파일만 있고 매크로는 없습니다.XML 결과 생성 가능

Cxx테스트 또한 가볍고 사용하기 쉬운 크로스 플랫폼 JUnit/CppUnit/xUnit과 유사한 C++용 프레임워크를 찾아볼 가치가 있습니다.우리는 테스트를 추가하고 개발하는 것이 매우 간단하다고 생각합니다.

애린 살펴볼 가치가 있는 또 다른 C++ 테스트 프레임워크입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top