2017-04-06 31 views
0

背景:我正在爲傳入流量寫一個會話表。該表應該保存所有活動的UDP/TCP連接。googletest中參數化測試的一般問題

我使用googletest包來測試我的實現。 我製備基於夾具以下列格式參數化試驗:

class SessionTest - initialize all staff. 

struct ConnectionInfo - holds set of connection parameters (IPs, ports, etc..) 

class SessionTestPrepare : SessionTest , testing::WithParamInterface<ConnectionInfo> - initialization. 

TEST_P(SessionTestPrepare, test) - holds the test cases and logic. 

INSTANTIATE_TEST_CASE_P(default, SessionTestPrepare_ testing::Values( 
ConectionInfo{}, 
ConectionInfo{}, 
ConectionInfo{}, 

我注意到,每一個新的參數被測試時,SessionTest構造和設置功能被稱爲(當然析構函數的和拆除)。
注意:我的sessionTable在這裏被聲明和初始化。

  1. 有沒有辦法避免在每組參數測試後調用SetUp和TearDown?
  2. 是否有一種方法可以在每次測試後保持會話表的狀態,而不會使其成爲全局的(即當測試第二個連接參數時,第一個連接參數仍在表中)?

回答

2

要運行設置和測試夾具推倒一次,使用SetUpTestCaseTearDownTestCase代替SetUpTearDown。並且shared resources可以存儲在具有靜態成員變量的夾具中。例如:

class SessionTestPrepare : public ::testing::WithParamInterface<ConnectionInfo> //... 
{ 
public: 
    static void SetUpTestCase(); 
    static void TearDownTestCase(); 

    static ConnectionInfo * shared_data; 
    //... 
} 

SetUpTestCase第一參數測試開始之前被調用,並在最後一個參數測試結束後TearDownTestCase被調用。您可以在這些功能中創建/刪除共享資源。