원문 : http://javawork.egloos.com/2282768


Google Test는 C++를 위한 테스트 프레임워크 입니다. 테스트를 작성하고 운용하는데 여러가지 편리한 기능을 제공합니다.기존에 UnitTest++를 사용하시는 분들이 많아서 UnitTest++에 비교해서 설명을 해볼까합니다.

첫번째가 UnitTest++, 두번째로 나오는 코드는 Google Test 입니다.

간단한 사용법
//=========================UnitTest++=======================//

#include <UnitTest++.h>
TEST(SimpleTest)
{
    CHECK(true);
}
int main()
{
    return UnitTest::RunAllTests();
}

//=========================GoogleTest======================//
#include <gtest/gtest.h>
TEST(SimpleTest, IsPrime)
{
    EXPECT_TRUE(true);
}
int _tmain(int argc, _TCHAR* argv[])
{
    testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}

TEST 함수들
//=========================UnitTest++=======================//
CHECK(true);
CHECK_EQUAL(left_value, right_value);
CHECK_CLOSE(3.14, 3.1415, 0.01);

//=========================GoogleTest======================//
EXPECT_TRUE(true);
EXPECT_EQ(left_value, right_value);
EXPECT_NEAR(3.14f, 3.14159f, 0.01);

Fixture 기능
//=========================UnitTest++=======================//
struct SomeFixture
{
    SomeFixture() { /* setup */ }
    ~SomeFixture() { /* teardown */ }
    int testData;
};
TEST_FIXTURE(SomeFixture, YourTestName)
{
    testData = 100;
}

//=========================GoogleTest======================//
class SomeFixture : public testing::Test
{
protected:
    SomeFixture() { /* setup */ }
    ~SomeFixture() { /* teardown */ }
    or
    virtual void SetUp() { /* setup */ }
    virtual void TearDown() { /* teardown */ }

    int testData;
};
TEST_F(SomeFixture, YourTestName)
{
    testData = 100;
}


테스트 그룹화 기능
//=========================UnitTest++=======================//
SUITE(ContainerTestSuite)
{
    TEST(QueueTest)
    {
        ...
    }
    TEST(ListTest)
    {
        ...
    }
}
SUITE(NetworkTestSuite)
{
    TEST(SomeTest)
    {
        ...
    }
}

UnitTest::TestReporterStdout reporter;
UnitTest::TestRunner test_runner(reporter);
test_runner.RunTestsIf(UnitTest::Test::GetTestList(), "NetworkTestSuite", UnitTest::True(), 0);

//=========================GoogleTest======================//
TEST(ContainerTestSuite, QueueTest)
{
        ...
}
TEST(ContainerTestSuite, ListTest)
{
        ...
}
TEST(NetworkTestSuite, SomeTest)
{
        ...
}

실행인자를 아래와 같이주면 됨
--gtest_filter=NetworkTestSuite.*


Google Test만의 장점
  • 테스트 함수가 ASSERT_ 계열과 EXPECT_ 계열로 분리되어 테스트 흐름을 제어가능
  • 실행인자로 테스트케이스에 대한 여러 옵션을 줄 수 있음
  • 테스트 실패시 브레이크 잡아주는 기능
  • 초록과 빨강의 컬러풀 피드백(!)

추천 학습순서

  1. 시작문서 : http://code.google.com/p/googletest/wiki/GoogleTestPrimer
  2. 예제 : http://code.google.com/p/googletest/wiki/GoogleTestSamples
  3. 더 다양한 기능 : http://code.google.com/p/googletest/wiki/GoogleTestAdvancedGuide