谷歌测试框架参数化夹具

Google test framework parametrize fixtures

本文关键字:夹具 参数 框架 测试 谷歌      更新时间:2023-10-16

我有一个问题。 我使用以下结构作为夹具:

类无效SDPTest : public ::testing::Test{保护:    Virtual void SetUp(){        std::字符串名称("名称");        服务器=新 Sip服务器(名称);        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 *提供SDPSession, *answerSDPSession ;    SipServer *服务器;    SDPNeg 谈判代表;};

我想通过文件名参数化这个类。如何让它变得更好?

有很多方法可以做到这一点 - 我将向您展示两种:

方法 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;