GoogleTest(参数化)-4

之前的都是一个个的去进行测试,比如一个判断是不是素数的函数,我测试就需要这样:

TEST(IsPrimeTest, HandleTrueReturn)  
{  
    EXPECT_TRUE(IsPrime(3));  
    EXPECT_TRUE(IsPrime(5));  
    EXPECT_TRUE(IsPrime(11));  
    EXPECT_TRUE(IsPrime(23));  
    EXPECT_TRUE(IsPrime(17));  
}  

现在我要测试100个,我们是不是要这样写一百行呢,要是还要分成不同的测试案例呢?这就需要我们引入一个参数化。

参数化

步骤

  1. 告诉gtest你的参数类型是什么,添加一个类,继承testing::TestWithParam,其中T就是你需要参数化的参数类型,比如上面的找素数例子,需要参数化一个int型的参数。
class IsPrimeParamTest : public::testing::TestWithParam
{

};
  1. 告诉gtest你拿到参数的值后,具体做些什么样的测试。
    这里要使用一个新的宏:TEST_P,关于这个"P"的含义,Google给出的答案就是可以理解为”parameterized" (参数化)或者 "pattern"(模型)。在TEST_P宏里,使用GetParam()获取当前的参数的具体值。
TEST_P(IsPrimeParamTest, HandleTrueReturn)
{
    int n =  GetParam();
    EXPECT_TRUE(IsPrime(n));
}
  1. 告诉gtest你想要测试的参数范围是什么

使用INSTANTIATE_TEST_CASE_P这宏来告诉gtest你要测试的参数范围:

INSTANTIATE_TEST_CASE_P(TrueReturn, IsPrimeParamTest, testing::Values(3, 5, 11, 23, 17));  

第一个参数是测试案例的前缀,可以任意取。

第二个参数是测试案例的名称,需要和之前定义的参数化的类的名称相同,如:IsPrimeParamTest

第三个参数是可以理解为参数生成器,上面的例子使用test::Values表示使用括号内的参数。Google提供了一系列的参数生成的函数:

函数 含义
Range(begin, end[, step]) 范围在begin~end之间,步长为step,不包括end
Values(v1, v2, ..., vN) v1,v2到vN的值
ValuesIn(container) and ValuesIn(begin, end) 从一个C类型的数组或是STL容器,或是迭代器中取值
Bool() 取false 和 true 两个值
Combine(g1, g2, ..., gN) 将g1,g2,...gN进行排列组合,g1,g2,...gN本身是一个参数生成器,每次分别从g1,g2,..gN中各取出一个值,组合成一个元组(Tuple)作为一个参数。

注:Combine只在提供了头的系统中有效。gtest会自动去判断是否支持tr/tuple,如果你的系统确实支持,而gtest判断错误的话,你可以重新定义宏GTEST_HAS_TR1_TUPLE=1。

~ 更多函数实际引用例子:参数例子 ~

参数化后的测试案例名

命名规则大概为:
prefix/test_case_name.test.name/index
前缀/测试案例的名称/索引

文章参考:https://www.cnblogs.com/coderzh/archive/2009/04/08/1431297.html

你可能感兴趣的:(GoogleTest(参数化)-4)