gtest使用 (一)

2014-11-24 03:12:45 · 作者: · 浏览: 5

首先#include ,当然工程的头文件路径要设置正确

1.简单测试TEST


Cpp代码
#include
int Factorial( int n )
{
if(n==2) return 100; //故意出个错,嘻嘻
return n<=0 1 : n*Factorial(n - 1);
}
//用TEST做简单测试
TEST(TestFactorial, ZeroInput) //第一个参数是测试用例名,第二个参数是测试名:随后的测试结果将以"测试用例名.测试名"的形式给出
{
EXPECT_EQ(1, Factorial(0)); //EXPECT_EQ稍候再说,现在只要知道它是测试两个数据是否相等的就行了。
}

TEST(TestFactorial, OtherInput)
{
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[])
{
testing::InitGoogleTest(&argc,argv); //用来处理Test相关的命令行开关,如果不关注也可不加
RUN_ALL_TESTS(); //看函数名就知道干啥了
std::cin.get(); //只是让它暂停而已,不然一闪就没了
return 0;
}
[cpp] view plaincopyprint #include
int Factorial( int n )
{
if(n==2) return 100; //故意出个错,嘻嘻
return n<=0 1 : n*Factorial(n - 1);
}
//用TEST做简单测试
TEST(TestFactorial, ZeroInput) //第一个参数是测试用例名,第二个参数是测试名:随后的测试结果将以"测试用例名.测试名"的形式给出
{
EXPECT_EQ(1, Factorial(0)); //EXPECT_EQ稍候再说,现在只要知道它是测试两个数据是否相等的就行了。
}

TEST(TestFactorial, OtherInput)
{
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[])
{
testing::InitGoogleTest(&argc,argv); //用来处理Test相关的命令行开关,如果不关注也可不加
RUN_ALL_TESTS(); //看函数名就知道干啥了
std::cin.get(); //只是让它暂停而已,不然一闪就没了
return 0;
}

#include
int Factorial( int n )
{
if(n==2) return 100; //故意出个错,嘻嘻
return n<=0 1 : n*Factorial(n - 1);
}
//用TEST做简单测试
TEST(TestFactorial, ZeroInput) //第一个参数是测试用例名,第二个参数是测试名:随后的测试结果将以"测试用例名.测试名"的形式给出
{
EXPECT_EQ(1, Factorial(0)); //EXPECT_EQ稍候再说,现在只要知道它是测试两个数据是否相等的就行了。
}

TEST(TestFactorial, OtherInput)
{
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[])
{
testing::InitGoogleTest(&argc,argv); //用来处理Test相关的命令行开关,如果不关注也可不加
RUN_ALL_TESTS(); //看函数名就知道干啥了
std::cin.get(); //只是让它暂停而已,不然一闪就没了
return 0;
}
2.多个测试场景需要相同数据配置的情况,用TEST_F

Cpp代码
//用TEST_F做同配置的系列测试
typedef std::basic_string tstring;
struct FooTest : testing::Test {
//这里定义要测试的东东
tstring strExe;
//可以利用构造、析构来初始化一些参数
FooTest() {}
virtual ~FooTest() {}

//如果构造、析构还不能满足你,还有下面两个虚拟函数
virtual void SetUp() {
// 在构造后调用
strExe.resize(MAX_PATH);
GetModuleFileName(NULL, &strExe[0], MAX_PATH);
}

virtual void TearDown() { } // 在析构前调用
};

tstring getfilename(const tstring &full) //偶写的从完整路径里取出文件名的函数(路径分隔符假定为'\\')
{
return full.substr(full.rfind(_T('\\')));
}

tstring getpath(const tstring &full) //偶写的从完整路径里取出路径名的函数(Windows路径)
{
return full.substr(0, full.rfind(_T('\\')));
}

TEST_F(FooTest, Test_GFN) //测试getfilename函数
{
EXPECT_STREQ(_T("Projectexe"), getfilename(strExe).c_str());
}

TEST_F(FooTest, Test_GP) //测试getpath函数
{
EXPECT_STREQ(_T("D:\\Code\\libs\\google\\gtest-1\\BCC_SPC\\bcc\\ex"), getpath(strExe).c_str());
}

int main(int argc, TCHAR* argv[]) //主函数还是一样地
{
testing::InitGoogleTest(&argc,argv);
RUN_ALL_TESTS();
std::cin.get();
return 0;
}
[cpp] view plaincopyprint //用TEST_F做同配置的系列测试
typedef std::basic_string tstring;
struct FooTest : testing::Test {
//这里定义要测试的东东
tstring strExe;