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

猜你喜欢

转载自blog.csdn.net/weixin_34290352/article/details/93507741