【问题标题】:Google test framework parametrize fixtures谷歌测试框架参数化夹具
【发布时间】:2012-05-02 16:46:59
【问题描述】:
我有一个问题。我使用以下结构作为夹具:
类 unvalidSDPTest : public ::testing::Test{
受保护:
虚拟无效设置(){
标准::字符串名称(“名称”);
服务器=新的 SipServer(名称);
std::ifstream 提供文件,答案文件;
offerFile.open("unvalidOfferSDP.txt");
answerFile.open("unvalidAnswerSDP.txt");
标准::字符串提供RawSDP,answerRawSDP;
报价文件>>报价原始SDP;
answerFile>>answerRawSDP;
offerSDPSession = 服务器->MakeSDPSession( const_cast(offerRawSDP.c_str()) ) ;
answerSDPSession = 服务器->MakeSDPSession( const_cast(answerRawSDP.c_str()) ) ;
}
虚拟 void TearDown(){
删除服务器;
}
pjmedia_sdp_session *offerSDPSession, *answerSDPSession ;
SipServer *服务器;
SDPNeg 谈判者;
};
我想通过文件名参数化这个类。如何让它变得更好?
【问题讨论】:
标签:
c++
unit-testing
googletest
【解决方案1】:
有很多方法可以做到这一点 - 我将向您展示两种:
方法一:创建一个带有虚函数的基类,然后派生出来。
class unvalidSDPTestBase : public ::testing::Test{
virtual const char * offer_filename() const =0;
virtual const char * answer_filename() const =0;
protected:
virtual void SetUp(){
std::string Name("name");
Server=new SipServer(Name);
std::ifstream offerFile,answerFile;
offerFile.open( offer_filename());
answerFile.open(answer_filename());
std::string offerRawSDP,answerRawSDP;
offerFile>>offerRawSDP;
answerFile>>answerRawSDP;
offerSDPSession = Server->MakeSDPSession( const_cast(offerRawSDP.c_str()) ) ;
answerSDPSession = Server->MakeSDPSession( const_cast(answerRawSDP.c_str()) ) ;
}
virtual void TearDown(){
delete Server;
}
pjmedia_sdp_session *offerSDPSession, *answerSDPSession ;
SipServer *Server;
SDPNeg Negotiator;
};
class unvalidSPDTestBase: public unvalidSDPTestBase
{
virtual const char * offer_filename() const { return "..."; }
virtual const char * answer_filename() const { return "..."; }
}
方法2:使用诸如系统和模板之类的特征:
template<typename FILENAME_SOURCE>
class SDPTest : public ::testing::Test{
protected:
virtual void SetUp(){
std::string Name("name");
Server=new SipServer(Name);
std::ifstream offerFile,answerFile;
offerFile.open( FILENAME_SOURCE::offer_filename());
answerFile.open( FILENAME_SOURCE::answer_filename());
std::string offerRawSDP,answerRawSDP;
offerFile>>offerRawSDP;
answerFile>>answerRawSDP;
offerSDPSession = Server->MakeSDPSession( const_cast(offerRawSDP.c_str()) ) ;
answerSDPSession = Server->MakeSDPSession( const_cast(answerRawSDP.c_str()) ) ;
}
virtual void TearDown(){
delete Server;
}
pjmedia_sdp_session *offerSDPSession, *answerSDPSession ;
SipServer *Server;
SDPNeg Negotiator;
};
struct InvalidFilenames
{
static const char * offer_filename() { return "..."; }
static const char * answer_filename() { return "..."; }
};
typedef SDPTest<InvalidFilenames> unvalidSDPTest;