概述
有一个类,其中有个接口被重载,如下:
想要对addItems进行测试,但不想为每个重载函数写一遍相同的测试用例。
最开始想用TestWithParam,但发现行不通,否决。
因为重载函数的个数基本确定,所以决定使用TYPED_TEST_CASE,如下:
为什么要使用vector<any>呢?如果使用vector<T>,那么在编译时会出错,想像一下T是int的情况,那么因为编译时检查,
class
Item {
public :
int addItems( int area,vector < int > value);
int addItems( int area,vector < std:: string > value);
int addItems( int area,vector < double > value);
};
public :
int addItems( int area,vector < int > value);
int addItems( int area,vector < std:: string > value);
int addItems( int area,vector < double > value);
};
想要对addItems进行测试,但不想为每个重载函数写一遍相同的测试用例。
最开始想用TestWithParam,但发现行不通,否决。
因为重载函数的个数基本确定,所以决定使用TYPED_TEST_CASE,如下:
template
<
typename T
>
class ItemTest: public ::testing::Test{
public :
ItemTest(){
if (typeid(T) == typeid( int )){
_value.push_back( 1 );
_value.push_back( 2 );
_value.push_back( 3 );
} else if (typeid(T) == typeid( string )){
_value.push_back( string ( " Hello " ));
_value.push_back( string ( " world " ));
}
}
std::vector < boost::any > _value;
typedef std::vector < T > List;
};
class ItemTest: public ::testing::Test{
public :
ItemTest(){
if (typeid(T) == typeid( int )){
_value.push_back( 1 );
_value.push_back( 2 );
_value.push_back( 3 );
} else if (typeid(T) == typeid( string )){
_value.push_back( string ( " Hello " ));
_value.push_back( string ( " world " ));
}
}
std::vector < boost::any > _value;
typedef std::vector < T > List;
};
为什么要使用vector<any>呢?如果使用vector<T>,那么在编译时会出错,想像一下T是int的情况,那么因为编译时检查,
else
if
(typeid(T)
==
typeid(
string
)){
_value.push_back( string ( " Hello " ));
_value.push_back( string ( " world " ));
}
_value.push_back( string ( " Hello " ));
_value.push_back( string ( " world " ));
}
这一段代码就编译不过了。
最后,测试用例可以如下编写:
代码
using testing::Types;
typedef ::testing::Types < int , string , double > MyTypes;
TYPED_TEST_CASE(ItemTest, MyTypes);
TYPED_TEST(ItemTest,test01)
{
Item t;
typename TestFixture::List values;
for ( int i = 0 ;i < this -> _value.size(); ++ i){
values.push_back(any_cast < TypeParam > ( this -> _value[i]));
}
EXPECT_TRUE(t.addItems( 0 ,values));
}
int main( int argc, char ** argv)
{
::testing::InitGoogleTest( & argc,argv);
return RUN_ALL_TESTS();
}
using testing::Types;
typedef ::testing::Types < int , string , double > MyTypes;
TYPED_TEST_CASE(ItemTest, MyTypes);
TYPED_TEST(ItemTest,test01)
{
Item t;
typename TestFixture::List values;
for ( int i = 0 ;i < this -> _value.size(); ++ i){
values.push_back(any_cast < TypeParam > ( this -> _value[i]));
}
EXPECT_TRUE(t.addItems( 0 ,values));
}
int main( int argc, char ** argv)
{
::testing::InitGoogleTest( & argc,argv);
return RUN_ALL_TESTS();
}
转载于:https://www.cnblogs.com/FrankTan/archive/2010/03/01/1676052.html
最后
以上就是留胡子西装为你收集整理的gtest测试重载接口的全部内容,希望文章能够帮你解决gtest测试重载接口所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复