원문 : 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_ 계열로 분리되어 테스트 흐름을 제어가능
- ASSERT_*를 쓰면 테스트실패시 다음 테스트케이스로 넘어가고 EXPECT_*를 쓰면 실패하더라도 나머지 테스트케이스 모두 실행.
- 참고 URL : http://rein.upnl.org/wordpress/archives/1460
- 실행인자로 테스트케이스에 대한 여러 옵션을 줄 수 있음
- 선별적으로 실행한다거나 실행횟수를 조절하는 등
- 참고 URL : http://reiot.com/2008/07/04/google-test/
- 테스트 실패시 브레이크 잡아주는 기능
- 실행인자로 --gtest_break_on_failure
- 참고 URL : http://www.npteam.net/656
- 초록과 빨강의 컬러풀 피드백(!)
추천 학습순서
- 시작문서 : http://code.google.com/p/googletest/wiki/GoogleTestPrimer
- 예제 : http://code.google.com/p/googletest/wiki/GoogleTestSamples
- 더 다양한 기능 : http://code.google.com/p/googletest/wiki/GoogleTestAdvancedGuide
'C++' 카테고리의 다른 글
printf Type Field Characters (0) | 2012.05.31 |
---|---|
c 자료형 - Data Type Ranges (0) | 2012.05.31 |
graceful shutdown - network (0) | 2012.05.31 |
gtest - google test 소스 포함하여 사용하기 (not static library) (0) | 2012.05.24 |
google break pad (0) | 2012.05.23 |
ActiveX에서 exe 호출시 주의할 점 (0) | 2012.05.20 |
c++ 프로그램에서 web html과 통신 (0) | 2012.05.20 |
log4cxx 코딩으로 로거 생성 샘플 (0) | 2012.05.20 |