우선 아래와 같이 간단한 factorial 함수를 만들어서 사용한다.
- factorial.cpp
int factorial(int n)
{
if (n == 0)
return 1;
return n * factorial(n - 1);
}
{
if (n == 0)
return 1;
return n * factorial(n - 1);
}
- factorial.h
#ifndef FACTORIAL_H
#define FACTORIAL_H
int factorial(int n);
#endif
#define FACTORIAL_H
int factorial(int n);
#endif
이제 테스트 케이스를 작성하자. 파일명은 일관성을 유지할 수 있도록 모듈 네임 뒤에 '_test'를 붙이도록하자.
- factorial_test.cpp
#include "factorial.h"
#include <gtest/gtest.h>
/* 0을 입력했을 때 결과가 정상적으로 나오는지 테스트 */
TEST(FactorialTest, HandleZero)
{
EXPECT_EQ(1, factorial(0));
}
/* 임의의 양수값을 입력했을 때 결과가 정상적으로 나오는지 테스트 */
TEST(FactorialTest, HandlePositiveInput)
{
EXPECT_EQ(1, factorial(1));
EXPECT_EQ(2, factorial(2));
EXPECT_EQ(6, factorial(3));
EXPECT_EQ(40320, factorial(8));
}
int main(int argc, char **argv)
{
/* gtest 초기화 */
::testing::InitGoogleTest(&argc, argv);
/* 모든 테스트 케이스 실행 */
return RUN_ALL_TESTS();
}
#include <gtest/gtest.h>
/* 0을 입력했을 때 결과가 정상적으로 나오는지 테스트 */
TEST(FactorialTest, HandleZero)
{
EXPECT_EQ(1, factorial(0));
}
/* 임의의 양수값을 입력했을 때 결과가 정상적으로 나오는지 테스트 */
TEST(FactorialTest, HandlePositiveInput)
{
EXPECT_EQ(1, factorial(1));
EXPECT_EQ(2, factorial(2));
EXPECT_EQ(6, factorial(3));
EXPECT_EQ(40320, factorial(8));
}
int main(int argc, char **argv)
{
/* gtest 초기화 */
::testing::InitGoogleTest(&argc, argv);
/* 모든 테스트 케이스 실행 */
return RUN_ALL_TESTS();
}
모든 소스코드를 컴파일하고 테스트 케이스를 실행하면 아래와 같이 정상적으로 실행이 완료된 결과를 확인할 수 있다.
superkkt@superkkt:~/tmp$ g++ -Wall -c factorial.cpp
superkkt@superkkt:~/tmp$ g++ -Wall -o factorial_test factorial_test.cpp factorial.o -lgtest -lpthread
superkkt@superkkt:~/tmp$ ./factorial_test
[==========] Running 2 tests from 1 test case.
[----------] Global test environment set-up.
[----------] 2 tests from FactorialTest
[ RUN ] FactorialTest.HandleZero
[ OK ] FactorialTest.HandleZero (0 ms)
[ RUN ] FactorialTest.HandlePositiveInput
[ OK ] FactorialTest.HandlePositiveInput (0 ms)
[----------] 2 tests from FactorialTest (0 ms total)
[----------] Global test environment tear-down
[==========] 2 tests from 1 test case ran. (1 ms total)
[ PASSED ] 2 tests.
이제 factorial 모듈에 버그를 만들어보자. 예를 들어서 아래와 같이 마지막 라인의 곱하기를 더하기로 바꿔보자.
...
return n + factorial(n - 1);
return n + factorial(n - 1);
다시 모든 소스코드를 컴파일하고 테스트 케이스를 실행하면 이번에는 양수입력 테스트 과정에서 에러가 발생한다.
superkkt@superkkt:~/tmp$ ./factorial_test
[==========] Running 2 tests from 1 test case.
[----------] Global test environment set-up.
[----------] 2 tests from FactorialTest
[ RUN ] FactorialTest.HandleZero
[ OK ] FactorialTest.HandleZero (0 ms)
[ RUN ] FactorialTest.HandlePositiveInput
factorial_test.cpp:12: Failure
Value of: factorial(1)
Actual: 2
Expected: 1
factorial_test.cpp:13: Failure
Value of: factorial(2)
Actual: 4
Expected: 2
factorial_test.cpp:14: Failure
Value of: factorial(3)
Actual: 7
Expected: 6
factorial_test.cpp:15: Failure
Value of: factorial(8)
Actual: 37
Expected: 40320
[ FAILED ] FactorialTest.HandlePositiveInput (1 ms)
[----------] 2 tests from FactorialTest (1 ms total)
[----------] Global test environment tear-down
[==========] 2 tests from 1 test case ran. (1 ms total)
[ PASSED ] 1 test.
[ FAILED ] 1 test, listed below:
[ FAILED ] FactorialTest.HandlePositiveInput
[==========] Running 2 tests from 1 test case.
[----------] Global test environment set-up.
[----------] 2 tests from FactorialTest
[ RUN ] FactorialTest.HandleZero
[ OK ] FactorialTest.HandleZero (0 ms)
[ RUN ] FactorialTest.HandlePositiveInput
factorial_test.cpp:12: Failure
Value of: factorial(1)
Actual: 2
Expected: 1
factorial_test.cpp:13: Failure
Value of: factorial(2)
Actual: 4
Expected: 2
factorial_test.cpp:14: Failure
Value of: factorial(3)
Actual: 7
Expected: 6
factorial_test.cpp:15: Failure
Value of: factorial(8)
Actual: 37
Expected: 40320
[ FAILED ] FactorialTest.HandlePositiveInput (1 ms)
[----------] 2 tests from FactorialTest (1 ms total)
[----------] Global test environment tear-down
[==========] 2 tests from 1 test case ran. (1 ms total)
[ PASSED ] 1 test.
[ FAILED ] 1 test, listed below:
[ FAILED ] FactorialTest.HandlePositiveInput
단순히 에러만 내뿜고 종료되는게 아니라, 어떤 테스트 케이스에서, 예상했던 값은 무엇이였는데, 실제로는 어떠한 값이 반환되었다는 내용들이 출력된다.
더 자세한 사용법은 공식사이트의 위키를 참조한다.
<참조>
http://code.google.com/p/googletest/w/list
http://code.google.com/p/googletest/wiki/GoogleTestPrimer

comments
comments rss (+댓글 쓰러가기)