我是靠谱客的博主 留胡子西装,最近开发中收集的这篇文章主要介绍gtest测试重载接口,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

有一个类,其中有个接口被重载,如下:

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);
        
};


想要对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;

};



为什么要使用vector<any>呢?如果使用vector<T>,那么在编译时会出错,想像一下T是int的情况,那么因为编译时检查,
     else   if (typeid(T)  ==  typeid( string )){
        _value.push_back(
string ( " Hello " ));
        _value.push_back(
string ( " world " ));
    }

这一段代码就编译不过了。

最后,测试用例可以如下编写:


expandedblockstart.gif 代码

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测试重载接口所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部