C ++ 단위 테스트 프레임 워크에 대한 권장 사항과 관련하여 이미 몇 가지 질문이 있지만 프레임 워크 중 하나를 권장하기 때문에 모든 답변이 도움이되지는 않지만 (기능) 비교에 대한 정보는 제공하지 않습니다.
가장 흥미로운 프레임 워크는 CppUnit, Boost 및 새로운 Google 테스트 프레임 워크라고 생각합니다. 아무도 아직 비교를하지 않았습니까?
C ++ 단위 테스트 프레임 워크에 대한 권장 사항과 관련하여 이미 몇 가지 질문이 있지만 프레임 워크 중 하나를 권장하기 때문에 모든 답변이 도움이되지는 않지만 (기능) 비교에 대한 정보는 제공하지 않습니다.
가장 흥미로운 프레임 워크는 CppUnit, Boost 및 새로운 Google 테스트 프레임 워크라고 생각합니다. 아무도 아직 비교를하지 않았습니까?
답변:
그들은 Noel Llopis 의 C ++ 단위 테스팅 프레임 워크 정글 탐험 기사를 추천한다 . 그리고 더 최근 : C ++ Test Unit Frameworks
googletest를 다른 프레임 워크와 비교하는 기사를 찾지 못했습니다.
새로운 플레이어는 Google Test ( Google C ++ Testing Framework 라고도 함 )인데 꽤 좋습니다.
#include <gtest/gtest.h>
TEST(MyTestSuitName, MyTestCaseName) {
int actual = 1;
EXPECT_GT(actual, 0);
EXPECT_EQ(1, actual) << "Should be equal to one";
}
주요 특징:
ASSERT_EQ(5, Foo(i)) << " where i = " << i;
SCOPED_TRACE
서브 루틴 루프 용방금 내 프레임 워크 인 CATCH를 푸시 했습니다. 아직 개발 중이지만 이미 대부분의 다른 프레임 워크를 능가한다고 생각합니다. 사람들마다 기준이 다르지만 너무 많은 절충없이 대부분의 근거를 다루려고 노력했습니다. 맛보기에 대한 링크 된 블로그 항목을 살펴보십시오. 내 상위 5 가지 기능은 다음과 같습니다.
Objective-C 바인딩도 있습니다. 이 프로젝트는 Github에서 호스팅됩니다
CHECK_FLASE
및 REQUIRE_FLASE
매크로를 고려하십시오 .
Boost Test Library 는 특히 이미 Boost를 사용하고 있다면 매우 좋은 선택입니다.
// TODO: Include your class to test here.
#define BOOST_TEST_MODULE MyTest
#include <boost/test/unit_test.hpp>
BOOST_AUTO_TEST_CASE(MyTestCase)
{
// To simplify this example test, let's suppose we'll test 'float'.
// Some test are stupid, but all should pass.
float x = 9.5f;
BOOST_CHECK(x != 0.0f);
BOOST_CHECK_EQUAL((int)x, 9);
BOOST_CHECK_CLOSE(x, 9.5f, 0.0001f); // Checks differ no more then 0.0001%
}
다음을 지원합니다.
추신 : 시작에 도움이 될만한 기사를 썼습니다 : C ++ Unit Testing Framework : A Boost Test Tutorial
Wikipedia에는 지원되는 기능을 식별하는 표와 함께 포괄적 인 단위 테스트 프레임 워크 목록이 있습니다.
최근 에 Google Test 및 Boost Test Library에 대한 대안으로 xUnit ++를 출시했습니다 ( 비교 보기 ). xUnit.Net에 익숙하다면 xUnit ++을 사용할 준비가 된 것입니다.
#include "xUnit++/xUnit++.h"
FACT("Foo and Blah should always return the same value")
{
Check.Equal("0", Foo()) << "Calling Foo() with no parameters should always return \"0\".";
Assert.Equal(Foo(), Blah());
}
THEORY("Foo should return the same value it was given, converted to string", (int input, std::string expected),
std::make_tuple(0, "0"),
std::make_tuple(1, "1"),
std::make_tuple(2, "2"))
{
Assert.Equal(expected, Foo(input));
}
주요 특징:
Assert.Equal(-1, foo(i)) << "Failed with i = " << i;
Log.Debug << "Starting test"; Log.Warn << "Here's a warning";
CPUnit ( http://cpunit.sourceforge.net )은 Google Test와 유사하지만 더 적은 macos (어설 션은 함수 임)와 일반적인 매크로 함정을 피하기 위해 매크로가 접두사로 사용되는 프레임 워크입니다. 테스트는 다음과 같습니다.
#include <cpunit>
namespace MyAssetTest {
using namespace cpunit;
CPUNIT_FUNC(MyAssetTest, test_stuff) {
int some_value = 42;
assert_equals("Wrong value!", 666, some_value);
}
// Fixtures go as follows:
CPUNIT_SET_UP(MyAssetTest) {
// Setting up suite here...
// And the same goes for tear-down.
}
}
자동 등록되므로 이보다 더 많은 것이 필요하지 않습니다. 그런 다음 컴파일하고 실행하십시오. Java를 프로그래밍하는 데 시간을 소비 해야하는 사람들을 위해이 프레임 워크를 JUnit을 사용하는 것과 매우 흡사합니다. 아주 좋아요!
http://www.progweap.com/resources.html 에는 관련 C ++ 단위 테스트 리소스가 있습니다 .
API Sanity Checker — C / C ++ 라이브러리를위한 테스트 프레임 워크 :
공유 C / C ++ 라이브러리에 대한 기본 단위 테스트 자동 생성기. 매개 변수에 대한 합리적인 (대부분은 아니지만 대부분의 경우는 아님) 입력 데이터를 생성하고 헤더의 선언 분석을 통해 API의 모든 함수에 대해 간단한 ( "sanity"또는 "shallow"-quality) 테스트 사례를 작성할 수 있습니다. 파일.
생성 된 테스트의 품질을 통해 간단한 사용 사례에서 중대한 오류가 없는지 확인할 수 있습니다. 이 도구는 생성 된 테스트를 빌드 및 실행하고 충돌 (segfault), 중단, 모든 종류의 방출 된 신호, 0이 아닌 프로그램 리턴 코드 및 프로그램 정지를 감지 할 수 있습니다.
CppUnit, Boost 및 Google Test와 비교하여 고유 한 기능 :