mkdir gtest
cd /cygdrive/c/src/gtest ./configure make[memo]
"/cygdrive/c/src\gtest\include" "/cygdrive/c/src\gtest" "C:\src\gtest\include" "C:\src\gtest"(/cygdrive/cと C:\は両方書いておく。しかし、/cygdrive/c/を上に持ってくる
"/cygdrive/c/src\gtest\src\gtest-all.o"
tests(テストソース用) src(自分のソース用)
#include "gtest/gtest.h" int main(int argc, char* argv[]) { ::testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); }ここで、mainファイルを作らない場合は、以下をオブジェクトに追加する
gtest_main.o
cd Debug make
[==========] Running 0 tests from 0 test cases. [==========] 0 tests from 0 test cases ran. (0 ms total) [ PASSED ] 0 tests.
# C++なので g++を指定 CPP = g++ # 各マクロを定義して、ディレクトリの場所を教える PRJ_BASE_DIR = (任意のルートディレクトリ) SRC_DIR = $(PRJ_BASE_DIR)/src TESTS_DIR = $(PRJ_BASE_DIR)/tests GTEST_ROOT = /cygdrive/c/src/gtest # インクルードファイル LOCAL_INCLUDE = $(PRJ_BASE_DIR)/src # GoogleTest では 以下の2つが必須 LOCAL_INCLUDE += $(GTEST_ROOT) LOCAL_INCLUDE += $(GTEST_ROOT)/include # ソースファイル SRCS = $(SRC_DIR)/sample.c # テストファイル TEST_SRCS = $(TESTS_DIR)/RunAllTest.cpp TEST_SRCS += $(TESTS_DIR)/sampleTest.cpp # OBJ: オブジェクトファイルをまとめるマクロ # ${SRCS: .c=.o} は .c を .oへ変換するマクロ OBJ = $(SRCS:.c=.o) OBJ += $(TEST_SRCS:.cpp=.o) # GoogleTest では 以下のgtest-all.oを一緒にコンパイル OBJ += $(GTEST_ROOT)/src/gtest-all.o #コンパイル時のオプションを指定.CPPだとCPPFLAGSが暗黙のフラグ CPPFLAGS = $(addprefix -I, $(LOCAL_INCLUDE)) #慣例として、 allをtargetに対して宣言する TARGET = sample all:$(TARGET) $(TARGET): $(OBJ) $(CPP) $(OBJ) -o $(TARGET) clean: rm -rf $(SRC_DIR)/*.o $(TESTS_DIR)/*.o *.exe
#include "gtest/gtest.h" extern "C" { #include "sample.h" } TEST(AddTest, Test1) { ASSERT_EQ(2, add(2, 1)); }
int add(int x, int y);
int add(int x, int y) { return x + y; }
[==========] Running 1 test from 1 test case. [----------] Global test environment set-up. [----------] 1 test from AddTest [ RUN ] AddTest.Test1 ../tests/sampleTest.cpp:17: Failure Value of: add(2, 1) Actual: 3 Expected: 2 [ FAILED ] AddTest.Test1 (1 ms) [----------] 1 test from AddTest (1 ms total) [----------] Global test environment tear-down [==========] 1 test from 1 test case ran. (1 ms total) [ PASSED ] 0 tests. [ FAILED ] 1 test, listed below: [ FAILED ] AddTest.Test1 1 FAILED TEST
TEST(AddTest, Test1) { ASSERT_EQ(3, add(2, 1)); }
[==========] Running 1 test from 1 test case. [----------] Global test environment set-up. [----------] 1 test from AddTest [ RUN ] AddTest.Test1 [ OK ] AddTest.Test1 (0 ms) [----------] 1 test from AddTest (0 ms total) [----------] Global test environment tear-down [==========] 1 test from 1 test case ran. (0 ms total) [ PASSED ] 1 test.
キモはテスト関数を.cppでつくり、ヘッダファイルをextern"C"{}で囲むこと
extern "C" { #include "xxx.h" }
EXPECT_EQ(expected, actual) expected(期待値) と actual(実際の値)が等しいかをチェック
これ一つ、EXPECT_EQだけ知っていれば、とりあえず困らないのが本音。
class addTest: public ::testing::Test { public: int a; virtual void SetUp() { /**N ここにテスト実行前に呼び出したい処理を書く */ a = 1; } virtual void TearDown() { /**N ここにテスト実行後に呼び出したい処理を書く */ a = 0; } };
/**N SetUpでちゃんと1がセットされているか チェック */ TEST_F(addTest, CheckSetUp) { int num = a; EXPECT_EQ( 1, num); } [----------] Global test environment tear-down [==========] 2 tests from 2 test cases ran. (0 ms total) [ PASSED ] 2 tests.
TEST_F(addTest, AddTwice) { int num = add(1,2) + a; EXPECT_EQ( 4, num); } [----------] Global test environment tear-down [==========] 3 tests from 2 test cases ran. (0 ms total) [ PASSED ] 3 tests.
TEST_F(addTest, AddThenMainasu) { int num = add(1,2) - a; EXPECT_EQ( 2, num); } [----------] Global test environment tear-down [==========] 4 tests from 2 test cases ran. (0 ms total) [ PASSED ] 4 tests.
gtest-gbarをダウンロード http://code.google.com/p/gtest-gbar/
これであなたも 「レッド」→ 「グリーン」→ 「リファクタリング」