【问题标题】: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; 
    

    【讨论】:

      猜你喜欢
      • 2011-03-10
      • 2011-06-14
      • 1970-01-01
      • 1970-01-01
      • 2020-03-27
      • 2018-02-24
      • 1970-01-01
      • 2012-07-04
      • 2012-01-20
      相关资源
      最近更新 更多