Reputation: 131
i have a one question. i use the following structure as fixture:
class unvalidSDPTest : public ::testing::Test{ protected: virtual void SetUp(){ std::string Name("name"); Server=new SipServer(Name); std::ifstream offerFile,answerFile; offerFile.open("unvalidOfferSDP.txt"); answerFile.open("unvalidAnswerSDP.txt"); 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; };
and i want to parametrize this class by file name. how make it better?
Upvotes: 0
Views: 398
Reputation: 73470
There's many ways to do this - I'll show you two:
Method 1: Create a base class with a virtual functions, then derive from it.
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 "..."; }
}
Method 2: use a traits like system and templating:
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;
Upvotes: 2