2012-04-21 30 views
0

我有一個問題。我使用以下結構作爲夾具:谷歌測試框架參數化裝置

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

我想通過文件名參數化這個類。如何讓它變得更好?

回答

2

有很多方法可以做到這一點 - 我會告訴你們兩個:

方法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 "..."; } 
} 

方法二:使用特點,如系統和模板:

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; 
+0

啊哈!衷心感謝。我剛纔執行它。 – 2012-04-21 08:58:10