读《玩转gtest》http://www.cnblogs.com/coderzh/archive/2009/04/06/1426755.html
0. 杂问
一些关于测试覆盖tool的东东:http://www.cnblogs.com/coderzh/archive/2009/03/21/1418355.html
1. 事件:TestCase事件与Test事件
总结Test的组织:
* 无特殊事件处理的testcase,使用TEST(testcase-name, test-name)
* 有特殊事件处理的testcase,必须使用TEST_F(testcase-name, test-name)形式,否则,定义的事件将无法被调用
* testcase-name必须和一个特别定义的类(public testing::Test)一致,否则,编译处错如下:
FooTest.cpp:47: 错误:expected class-name before ‘{’ token
FooTest.cpp:47: 警告:‘class MyFooTest_HandleNoneZeroInput_Test’ 有虚函数却没有虚析构函数
FooTest.cpp:47: 错误:‘MyFooTest’ 在此作用域中尚未声明
注:TEST_F将会去使用类定义
* 目前MyFooTest.cpp的内容:
[root@localhost frank-study]# cat FooTest.cpp
#include <gtest/gtest.h>
#include "FooEnvironment.cpp"
extern int Foo(int, int);
class MyFooTest : public testing::Test {
protected:
static void SetUpTestCase() {
std::cout << "In TestSuite(TestCase) static setup function !" << std::endl;
}
static void TearDownTestCase() {
std::cout << "In TestSuite(TestCase) static tear down function !" << std::endl;
}
virtual void SetUp() {
std::cout << "In Test(TestCase) setup function !" << std::endl;
}
virtual void TearDown() {
std::cout << "In Test(TestCase) tear down function !" << std::endl;
}
};
TEST(FooTest, HandleNoneZeroInput) {
EXPECT_EQ(2, Foo(4,10)) << "Hi!";
EXPECT_EQ(5, Foo(30,18)) << "Hello! 1";
}
TEST(FooTest2, HandleNoneZeroInput) {
EXPECT_EQ(2, Foo(4,10));
EXPECT_EQ(6, Foo(30,18)) << "Hi ther!";
}
TEST(FooTest3, HandleZeroInput) {
EXPECT_ANY_THROW(Foo(10,0));
EXPECT_THROW(Foo(0,5), char*);
}
TEST_F(MyFooTest, HandleNoneZeroInput) {
EXPECT_EQ(2, Foo(4,10)) << "Hi!";
EXPECT_EQ(5, Foo(30,18)) << "Hello! 1";
EXPECT_EQ(5, Foo(30,18)) << "Hello! 2";
EXPECT_EQ(5, Foo(30,18)) << "Hello! 3";
}
TEST_F(MyFooTest, AnotherTest) {
EXPECT_EQ(2, Foo(4,10)) << "Hi!";
}
GTEST_API_ int main(int argc, char **argv) {
std::cout << " FRANK: Running main() from gtest_main.cc/n";
testing::AddGlobalTestEnvironment(new FooEnvironment);
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
2. 参数化
class IsPrimeParamTest : public::testing::TestWithParam<int>
{
};
TEST_P(IsPrimeParamTest, test name)
Q:类型参数化,比较复杂的???
3. 在VC6中搭建gtest-1.6环境
让VC6支持*.cc文件:http://hi.baidu.com/wayright/blog/item/286e7cc6873f7a1d9c163d3c.html
编译gtestlib.lib失败,估计和compiler对C++语言的新特性识别有关。