GTEST 是简单而且又非常实用的测试框架。下面关于GTEST的一些简单总结。

  1. 编译
    在GNU系统下:

    1
    2
    3
    
    g++ -I${GTEST_DIR}/include -I${GTEST_DIR} -c ${GTEST_DIR}/src/gtest-all.cc        
    
    ar -rv libgtest.a gtest-all.o    

在WINDOWS下:
GTEST在MSVC下面提供了相应的工程文件,直接用VS编译即可。
2. 简单用法
在GNU系统下,直接包含GTEST的头文件,连接到GTEST库。

1
    g++ -I${GTEST_DIR}/include path/to/your_test.cc libgtest.a –lpthread -o your_test        

在WINDOWS下直接连接到静态库。
3. SetUp & TearDown GTEST提供了以下级别的SETUP和TEARDOW。
3.1 程序级别
程序级别的是指程序在启动的时候和结束的时候分别SETUP和TEARDOWN一次。其作用与全局变量类似。
第一步,继承类:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
    class Environment {

    public:

    // The d'tor is virtual as we need to subclass Environment.

    virtual ~Environment() {}

    // Override this to define how to set up the environment.

    virtual void SetUp() {}

    // Override this to define how to tear down the environment.

    virtual void TearDown() {}

    private:

    // If you see an error about overriding the following function or

    // about it being private, you have mis-spelled SetUp() as Setup().

    struct Setup_should_be_spelled_SetUp {};

    virtual Setup_should_be_spelled_SetUp* Setup() { return NULL; }

    };

重写里面的SETUP和TEARDOWN方法。
第二步,调用Environment* AddGlobalTestEnvironment(Environment* env),注意这个要在RUN_ALL_TESTS前调用。如

1
2
3
4
5
6
    int main(int argc, char* argv[])
    {
        testing::AddGlobalTestEnvironment(new XXX Environment);
        testing::InitGoogleTest(&argc, argv);
        return RUN_ALL_TESTS();
    }

3.2 Fixture 级别
Fixture 级别是指,对于在这FIXTURE里的所有TESTCASE,只调用一次SETUP和TEARDOWN。
在你的FIXTURE里,添加两个静态的函数SetUpTestCase和TearDownTestCase

1
2
3
4
5
6
7
    class XXXTest : public ::testing::Test {
     protected:
      static void SetUpTestCase() {
      }
      static void TearDownTestCase() {
      }
    }

3.3 TestCase 级别
TestCase 级别是指TESTCASE调用之前和调用后分别调用的。
在你的TESTCASE里,重写虚函数SetUp和TearDown即可。如。

1
2
3
4
5
    class XXXTest : public ::testing::Test {
     protected:
      virtual void SetUp() { ... }
      virtual void TearDown() { ... }
    }
  1. Assertion
    GTEST提供两种,一种是ASSERT_XXX和EXPECT_XXX。前者表示不继续执行TESTCASE,后者表示继续执行。
    比如ASSERT_EQ, ASSERT_STREQ,EXPECT_EQ,EXPECT_TRUE等。