문제

C ++ 단위 테스트 프레임 워크에 대한 권장 사항에 관한 몇 가지 질문이 이미 있다는 것을 알고 있지만 프레임 워크 중 하나를 추천하지만 (기능) 비교에 대한 정보를 제공하지 않기 때문에 모든 답변은 도움이되지 않았습니다.

가장 흥미로운 프레임 워크는 CPPUnit, Boost 및 새로운 Google 테스트 프레임 워크입니다. 아직 비교 한 사람이 있습니까?

도움이 되었습니까?

해결책

이 질문을 참조하십시오 약간의 토론을 위해.

기사를 추천합니다.C ++ 장치 테스트 프레임 워크 정글 탐색, Noel Llopis에 의해. 그리고 더 최근 : C ++ 테스트 장치 프레임 워크

Googletest를 다른 프레임 워크와 비교하는 기사를 찾지 못했습니다.

다른 팁

새로운 플레이어는입니다 Google 테스트 (또한 ~으로 알려진 Google C ++ 테스트 프레임 워크) 그래도 꽤 좋습니다.

#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;
  • Google 테스트 자동으로 테스트를 감지하고 시험을 실행하기 위해 열거 할 필요가 없습니다.
  • 쉽게 만듭니다 연장하다 당신의 주장 어휘
  • 사망 시험 (고급 가이드 참조)
  • SCOPED_TRACE 서브 루틴 루프 용
  • 당신은 결정할 수 있습니다 실행할 테스트
  • XML 테스트 보고서 생성
  • 비품 / 모조품 / 템플릿...

방금 내 자신의 프레임 워크를 추진했습니다. 잡다, 저 밖에. 아직 개발 중이지만 이미 대부분의 다른 프레임 워크를 능가한다고 생각합니다. 다른 사람들마다 기준이 다르지만 너무 많은 트레이드 오프없이 대부분의 근거를 다루려고 노력했습니다. 맛보기에 대한 링크 된 블로그 항목을 살펴보십시오. 내 상위 5 가지 기능은 다음과 같습니다.

  • 헤더 만
  • 기능 및 방법 기반 테스트의 자동 등록
  • 표준 C ++ 표현식을 LHS 및 RHS로 분해합니다 (따라서 Assert Macros의 온 가족이 필요하지 않습니다).
  • 기능 기반 고정물 내 중첩 섹션을 지원합니다
  • 자연어를 사용한 이름 테스트 - 기능/ 방법 이름이 생성됩니다.

또한 대상 C 바인딩이 있습니다. 이 프로젝트는 주최됩니다 github

테스트 라이브러리 부스트 특히 부스트를 사용하고 있다면 특히 좋은 선택입니다.

// 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%
}

지원합니다 :

  • 자동적 인 또는 수동 테스트 등록
  • 많은 주장
  • 자동 비교 컬렉션
  • 다양한 출력 형식 (포함 XML)
  • 비품 / 템플릿...

추신 : 나는 당신이 시작하는 데 도움이 될 수있는 기사를 썼습니다. C ++ 단위 테스트 프레임 워크 : 부스트 테스트 자습서

Wikipedia는 포괄적입니다 단위 테스트 프레임 워크 목록, 기능이 지원되는 기능을 식별하는 테이블이 있습니다.

최근에 출시되었습니다 xunit ++, 특히 Google 테스트 및 부스트 테스트 라이브러리의 대안으로 비교). 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));
}

주요 특징:

  • 믿을 수 없을 정도로 빠른 : 테스트가 실행됩니다 동시에.
  • 가지고 다닐 수 있는
  • 자동적 인 테스트 등록
  • 많은 어설 션 유형 (부스트는 xunit ++에 아무것도 없습니다)
  • 비교 컬렉션 기본적으로.
  • 주장이 들어옵니다 레벨 :
    • 치명적인 오류
    • 치명적이지 않은 오류
    • 경고
  • 쉬운 주장하다 벌채 반출: Assert.Equal(-1, foo(i)) << "Failed with i = " << i;
  • 테스트 벌채 반출: Log.Debug << "Starting test"; Log.Warn << "Here's a warning";
  • 비품
  • 데이터 중심 테스트 (이론)
  • 실행할 테스트를 선택하십시오 기반 :
    • 속성 일치
    • 이름 기판 Matchin
    • 테스트 스위트

cpputest - 모의 라이브러리가있는 매우 멋지고 가벼운 프레임 워크. 자세히 살펴볼 가치가 있습니다.

CPUNIT (http://cpunit.sourceforge.net)은 Google 테스트와 유사하지만 MacOS가 적은 프레임 워크 (Asserts is Functions) 및 일반적인 거시적 함정을 피하기 위해 매크로가 접두사가있는 프레임 워크입니다. 테스트는 다음과 같습니다.

#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을 사용하는 것과 매우 흡사합니다. 아주 좋아요!

관련 C ++ 장치 테스트 리소스가 있습니다.http://www.progweap.com/resources.html

API Sanity Checker - C/C ++ 라이브러리의 테스트 프레임 워크 :

공유 C/C ++ 라이브러리에 대한 기본 단위 테스트의 자동 생성기. 매개 변수에 대한 합리적 (대부분의 경우에도 불행히도 모든 것이 아님) 입력 데이터를 생성하고 헤더의 선언 분석을 통해 API의 모든 기능에 대한 간단한 ( "Sanity"또는 "Shallow"-품질) 테스트 사례를 작성할 수 있습니다. 파일.

생성 된 테스트의 품질은 간단한 사용 사례에서 중요한 오류가없는 것을 확인할 수 있습니다. 이 도구는 생성 된 테스트를 구축하고 실행하고 충돌 (SEGFAULTS), 낙태, 모든 종류의 방출 신호, 0이 아닌 프로그램 반환 코드 및 프로그램 교수형을 감지 할 수 있습니다.

CPPUnit, Boost 및 Google 테스트와 비교하여 고유 한 기능 :

  • 자동 생성 테스트 데이터 및 입력 인수 (복잡한 데이터 유형조차도)
  • 현대적이고 매우 재사용 가능합니다 특수 유형 비품과 템플릿 대신
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top