0

1つ質問があります。次の構造をフィクスチャとして使用します。

クラス unvalidSDPTest : public ::testing::Test{
保護:
    仮想ボイドSetUp(){
        std::string Name("名前");
        サーバー=新しいSipServer(名前);
        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(){
        サーバーを削除します。
    }
    pjmedia_sdp_session *offerSDPSession, *answerSDPSession ;
    SipServer *サーバー;
    SDPNeg ネゴシエーター。
};

このクラスをファイル名でパラメータ化したいと思います。どうすれば良くなりますか?

4

1 に答える 1

2

これを行うには多くの方法があります。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 "..."; }
 }

方法 2: system や 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; 
于 2012-04-21T08:38:47.500 に答える