답변:
레거시 코드를 사용한 효과적인 작업 이 작성된 이유 는 레거시 코드에 단위 테스트를 적용하는 것이 었습니다 . Michael Feathers는 다른 답변에서 언급했듯이 CppUnit 과 CppUnitLite를 만드는 데 관여했습니다 .
구글은 최근 구글 테스트 (Google Test) 라 불리는 C ++ 앱 단위 테스트를위한 자체 라이브러리를 출시했다.
사용 가능한 여러 제품군 간의 훌륭한 비교를 확인하십시오 . 이 기사의 저자는 나중에 UnitTest ++를 개발했습니다 .
내가 특히 좋아하는 것은 (예외를 잘 처리한다는 사실과는 별도로) 테스트 케이스 및 테스트 픽스처 정의 주위에 매우 적은 양의 '관리'가 있다는 것입니다.
Noel Llopis of Games From Inside는 다양한 C ++ 단위 테스팅 프레임 워크와 게임 프로그래밍에 대한 책을 종합적으로 평가 한 C ++ 단위 테스팅 프레임 워크 정글 탐험 의 저자입니다 .
그는 CppUnitLite를 꽤 오랫동안 사용하여 다양한 것을 수정했지만 결국 다른 단위 테스트 라이브러리 작성자와 힘을 합쳐 UnitTest ++을 만들었습니다 . 우리는 여기서 UnitTest ++를 사용하며, 지금까지는 그것을 많이 좋아합니다. 발자국이 작은 힘의 정확한 균형이 있습니다.
나는 자체 개발 솔루션 인 CxxTest (Perl이 필요함)와 boost :: test를 사용했다. 현재 작업에서 단위 테스트를 구현했을 때 UnitTest ++ vs boost :: test가 나왔습니다.
나는 내가 사용했던 대부분의 부스트 라이브러리를 정말 좋아하지만 IMHO, boost :: test는 너무 무겁다. 특히 boost :: test 매크로를 사용하여 테스트 하니스의 주요 프로그램을 구현해야한다는 점이 마음에 들지 않았습니다. 나는 그것이 "순수한"TDD가 아니라는 것을 알고 있지만, 때로는 명령 줄에 특수 테스트 플래그가 전달되고 boost :: test가이 유형을 지원할 수없는 경우와 같이 GUI 응용 프로그램으로 테스트를 실행하는 방법이 필요합니다. 시나리오.
UnitTest ++는 (제한된) 경험에서 경험 한 가장 간단한 테스트 프레임 워크입니다.
나는 잘 알려지지 않았지만 아주 멋진 Turtle 라이브러리 와 함께 Boost.Test 라이브러리를 사용하고 있습니다.
코드 예제가 단어보다 잘 말하면 인터페이스에서 calculator
작동 하는 객체 view
(Turtle의 소개 예제) 를 테스트 한다고 가정 해보십시오.
// declares a 'mock_view' class implementing 'view'
MOCK_BASE_CLASS( mock_view, view )
{
// implements the 'display' method from 'view' (taking 1 argument)
MOCK_METHOD( display, 1 )
};
BOOST_AUTO_TEST_CASE( zero_plus_zero_is_zero )
{
mock_view v;
calculator c( v );
// expects the 'display' method to be called once with a parameter value equal to 0
MOCK_EXPECT( v, display ).once().with( 0 );
c.add( 0, 0 );
}
모의 객체에 대한 기대를 얼마나 쉽고 상세하게 선언합니까? 기대치가 충족되지 않으면 테스트는 실패합니다.
방금 내 프레임 워크 인 CATCH를 푸시 했습니다. 아직 개발 중이지만 이미 대부분의 다른 프레임 워크를 능가한다고 생각합니다. 사람들마다 기준이 다르지만 너무 많은 절충없이 대부분의 근거를 다루려고 노력했습니다. 맛보기에 대한 링크 된 블로그 항목을 살펴보십시오. 내 상위 5 가지 기능은 다음과 같습니다.
Objective-C 바인딩도 있습니다.
CppUnit이 방법입니다. 아래 링크를 참조하십시오 :
작고 간단한 UnitTest ++ .
현재 우리 회사에서 오랫동안 사용되는 코드 기반으로 사용할 수있는 단위 테스트 및 모의 프레임 워크를 찾고 있습니다. 아시다시피 c ++ 의 단위 테스트 프레임 워크 목록 이 길기 때문에 일부 필터를 적용하여 좀 더 자세히 볼 수있는 필터를 적용했습니다. 첫 번째 필터 기준은 무료 여야한다는 것입니다. 두 번째 기준은 프로젝트 활동이었습니다. 단위 테스트를 작성하려면 프레임 워크가 필요하기 때문에 모의 프레임 워크를 찾았습니다.
나는 활동에 따라 정렬 된 다음과 같은 대략적인 목록을 제시했습니다.
GoogleTest / GoogleMock : 많은 기여자가 있으며 Google 자체에서 사용합니다. 아마도 여기에있을 것이며 업데이트를받을 것입니다. 내 개인 코드베이스의 경우 가장 빠른 열차를 타기 위해이 조합으로 전환합니다.
BoostTest + Turtle : 자주 업데이트되지는 않지만 테스트 프레임 워크는 부스트의 일부이므로 유지 관리해야합니다. 반면에 거북은 주로 한 사람에 의해 유지되지만 활동이 분개하여 죽지 않았습니다. 이전 작업에서 부스트 라이브러리를 이미 사용했으며 현재 개인 코드로 사용하기 때문에이 조합에 대한 거의 모든 테스트 경험을 만들었습니다.
CppUTest : 테스트 및 조롱을 제공합니다. 이 프로젝트는 2008 년부터 2015 년까지 진행되었으며 최근 활동이 많이 있습니다. 웹에서 검색 할 때 (2013 년 마지막 업데이트를 한 CppUnit과 같이) 활동이 현저히 적은 많은 프로젝트가 더 자주 나오기 때문에 이러한 결과는 다소 놀랍습니다. 나는 이것에 대해 깊이 들여다 보지 않았으므로 세부 사항에 대해 아무 것도 말할 수 없습니다. 편집 (16.12.2015) : 최근에 이것을 시도하고 특히 모의 클래스를 사용할 때이 프레임 워크가 약간 어색하고 "C 스타일"인 것으로 나타났습니다. 또한 다른 프레임 워크보다 다양한 어설 션이있는 것 같습니다. 순수한 C 프로젝트에서 사용할 수 있다는 것이 주된 강점이라고 생각합니다.
QTest : Qt 프레임 워크와 함께 제공되는 테스트 라이브러리. 유지 관리는 한동안 보장되어야하지만 테스트 등록은 다른 프레임 워크에서보다 서투른 IMO이기 때문에 지원 라이브러리로 사용합니다. 내가 이해하는 한, 테스트 픽스처마다 하나의 테스트 실행이 필요합니다. 그러나 Qt-Gui 코드를 테스트 할 때 테스트 도우미 기능을 유용하게 사용할 수 있습니다. 모의가 없습니다.
Catch : 최근 활동이 있지만 주로 한 사람이 개발했습니다. 이 프레임 워크의 좋은 점은 테스트 자체에서 재사용 가능한 조명기 코드를 작성할 수있는 대체 조명기 접근법입니다. 또한 테스트 이름을 문자열로 설정하여 전체 문장을 테스트 이름으로 쓰는 경향이 있습니다. 나는이 스타일을 찢어 googleTest에 넣을 것이라고 ;-)
모의 프레임 워크의 수는 테스트 프레임 워크의 수보다 훨씬 적지 만 최근 활동이있는 것으로 밝혀졌습니다.
Hippomock : 2008 년부터 활성화되었지만 강도는 낮습니다.
FakeIt : 2013 년부터 활동했지만 한 사람에 의해 다소 개발되었습니다.
코드베이스가 장기적으로 사용되는 경우 BoostTest + Turtle 과 GoogleTest + GoogleMock 중에서 선택하십시오 . 나는 그 두 가지가 장기적인 유지 보수를해야한다고 생각합니다. 수명이 짧은 코드베이스 만 있으면 멋진 구문을 가진 Catch 를 사용해보십시오 . 그런 다음 조롱 프레임 워크를 추가로 선택해야합니다. Visual Studio를 사용하는 경우 BoostTest 및 GoogleTest 용 테스트 실행기 어댑터를 다운로드하여 VS에 통합 된 테스트 실행기 GUI로 테스트를 실행할 수 있습니다.
또한이 혀 , 템플릿 단위 테스트, 템플릿 기반의 프레임 워크. 문법은 어색하지만 (일부는 템플릿 남용이라고 함) 주요 장점은 모두 단일 헤더 파일에 포함되어 있다는 것입니다 .
여기 에 TUT으로 작성된 단위 테스트 의 예가 나와 있습니다.
ObjectMentor의 Michael Feathers는 CppUnit과 CppUnitLite의 개발에 중요한 역할을했습니다.
그는 이제 CppUnitLite를 추천합니다
CUnitWin32를 살펴 보십시오 . MS Visual C 용으로 작성되었으며 예제가 포함되어 있습니다.
cfix ( http://www.cfix-testing.org )를 살펴보십시오. Windows C / C ++ 개발에 특화되어 있으며 사용자 모드와 커널 모드 단위 테스트를 모두 지원합니다.
VisualAssert 가 VS 통합에서 훌륭한 일을하고 있다고 생각 합니다. VS에서 테스트를 실행하고 디버깅 할 수 있으며 테스트를 실행하기 위해 실행 파일을 만들 필요가 없습니다.
과당을 확인하십시오 : http://sourceforge.net/projects/fructose/
헤더 파일 만 포함되어 매우 이식성이 뛰어난 매우 간단한 프레임 워크입니다.
Typemock Isolator ++ 와 함께 MS Test를 사용하고 있습니다. 시도 해봐!