gtest 小结
GTEST 是简单而且又非常实用的测试框架。下面关于GTEST的一些简单总结。
-
编译
在GNU系统下: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编译即可。 -
简单用法
在GNU系统下,直接包含GTEST的头文件,连接到GTEST库。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一次。其作用与全局变量类似。
第一步,继承类:
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方法。
第二步,调用EnvironmentAddGlobalTestEnvironment(Environment env),注意这个要在RUN_ALL_TESTS前调用。如
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
class XXXTest : public ::testing::Test {
protected:
static void SetUpTestCase() {
}
static void TearDownTestCase() {
}
}
3.3 TestCase 级别
TestCase 级别是指TESTCASE调用之前和调用后分别调用的。
在你的TESTCASE里,重写虚函数SetUp和TearDown即可。如。
class XXXTest : public ::testing::Test {
protected:
virtual void SetUp() { ... }
virtual void TearDown() { ... }
}
- Assertion
GTEST提供两种,一种是ASSERT_XXX和EXPECT_XXX。前者表示不继续执行TESTCASE,后者表示继续执行。
比如ASSERT_EQ, ASSERT_STREQ,EXPECT_EQ,EXPECT_TRUE等。