테스트 프레임워크CppUnit, UnitTest++,TUT, …사용하기 쉽고 신뢰할 수 있는 GoogleTesthttp://code.google.com/p/googletest/구글의 제품에 사용 중Chromium, Protocol Buffers, … 등등
8.
Gtest 사용하기gtest라이브러리 다운로드gtest.h파일include라이브러리 빌드 후 lib 파일 링크#include <gtest\gtest.h>#pragma comment(lib, “gtest.lib”)int main(intargc, _TCHAR* argv[]){ ::testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS();}
9.
테스트 문법의 기본ASSERT_TRUE(ACTUAL )ASSERT_FALSE( ACTUAL )ASSERT_EQ( EXPECTED, ACTUAL )ASSERT_NE( EXPECTED, ACTUAL )ASSERT_FLOAT_EQ( EXPECTED, ACTUAL )ASSERT_STREQ( EXPECTED, ACTUAL)
테스트 파일 생성Ex)Swap_Test.cpp테스트스위트, 케이스 이름 결정보수의 용이성을 위해 테스트 이름을 정한다테스트 스위트는 테스트 카테고리케이스 이름은 세부적인 테스트를 나타낸다
13.
#include <gtest\gtest.h> TEST(Swap_Test, Swap_True){}[==========] Running 1 test from 1 test case.[----------] Global test environment set-up.[----------] 1 test from Swap_Test[ RUN ] Swap_Test.Swap_True[ OK ] Swap_Test.Swap_True (0 ms)[----------] 1 test from Swap_Test (0 ms total)[----------] Global test environment tear-down[==========] 1 test from 1 test case ran. (0 ms total)[ PASSED ] 1 test.
14.
#include <gtest\gtest.h> TEST(Swap_Test, Swap_True ){int x = 30;int y = 15;swap( x, y );ASSERT_EQ( 15, x ) << "x must be 15";ASSERT_EQ( 30, y ) << "y must be 30";}build => fail존재하지 않는 함수 호출로 빌드실패
15.
#include <gtest\gtest.h> voidswap(int& x, int& y){}TEST( Swap_Test, Swap_True ){int x = 30;int y = 15; swap( x, y ); ASSERT_EQ( 15, x ) << "x must be 15"; ASSERT_EQ( 30, y ) << "y must be 30";}build => successtest => failure빌드 성공, 테스트 실패
16.
[==========]Running 1 testfrom 1 test case.[----------]Global test environment set-up.[----------] 1 test from Swap_Test[ RUN ]Swap_Test.Swap_Truec:\....\Swap_Test.cpp(124): error: Value of: x Actual: 30Expected: 15x must be 15[ FAILED ] Swap_Test.Swap_True (0 ms)[----------]1 test from Swap_Test (0 ms total)[----------]Global test environment tear-down[==========]1 test from 1 test case ran. (0 ms total)[ PASSED ] 0 tests.[ FAILED ] 1 test, listed below:[ FAILED ] Swap_Test.Swap_True 1 FAILED TEST
17.
[==========]Running 1 testfrom 1 test case.[----------]Global test environment set-up.[----------] 1 test from Swap_Test[ RUN ]Swap_Test.Swap_Truec:\....\Swap_Test.cpp(124): error: Value of: x Actual: 30Expected: 15x must be 15[ FAILED ] Swap_Test.Swap_True (0 ms)[----------]1 test from Swap_Test (0 ms total)[----------]Global test environment tear-down[==========]1 test from 1 test case ran. (0 ms total)[ PASSED ] 0 tests.[ FAILED ] 1 test, listed below:[ FAILED ] Swap_Test.Swap_True 1 FAILED TEST
18.
[==========] Running 1test from 1 test case.[----------] Global test environment set-up.[----------] 1 test from Swap_Test[ RUN ] Swap_Test.Swap_Truec:\....\Swap_Test.cpp(124): error: Value of: x Actual: 30Expected: 15x must be 15[ FAILED ] Swap_Test.Swap_True (0 ms)[----------] 1 test from Swap_Test (0 ms total)[----------] Global test environment tear-down[==========] 1 test from 1 test case ran. (0 ms total)[ PASSED ] 0 tests.[ FAILED ] 1 test, listed below:[ FAILED ] Swap_Test.Swap_True 1 FAILED TEST…ASSERT_EQ( 15, x ) << "x must be 15“;…
19.
#include <gtest\gtest.h> voidswap(int& x, int& y){int t = x; y = x; x = t;}TEST( Swap_Test, Swap_True ){int x = 30;int y = 15; swap( x, y ); ASSERT_EQ( 15, x ) << "x must be 15"; ASSERT_EQ( 30, y ) << "y must be 30";}build => successtest => pass테스트 통과
20.
[==========] Running 1test from 1 test case.[----------] Global test environment set-up.[----------] 1 test from Swap_Test[ RUN ]Swap_Test.Swap_True[ OK ]Swap_Test.Swap_True (0 ms)[----------] 1 test from Swap_Test (0 ms total)[----------] Global test environment tear-down[==========] 1 test from 1 test case ran. (0 ms total)[ PASSED ] 1 test.
21.
의존성 제거클래스 간복합적인 관계 의존성 존재테스트 저해 설계 : 파일, 스레드, 통신등 외부 의존물을 사용통합테스트 => 단위 테스트