【问题标题】:General questions on parameterized test in googletestgoogletest中参数化测试的一般问题
【发布时间】:2017-09-01 06:16:29
【问题描述】:

背景:我正在为传入流量编写一个会话表。此表应包含所有活动的 UDP/TCP 连接。

我正在使用 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 构造函数和 Setup 函数(当然还有析构函数和 TearDown)。
注意:我的 sessionTable 在这里声明和初始化。

  1. 有没有办法避免在每组参数测试后调用 SetUp 和 TearDown?
  2. 有没有办法在每次测试后保持会话表的状态而不使其成为全局(即在测试第二个连接参数时,第一个仍然在表中)?

【问题讨论】:

    标签: googletest


    【解决方案1】:

    要在测试夹具中只运行一次设置和拆卸,请使用 SetUpTestCaseTearDownTestCase 而不是 SetUpTearDownshared resources 可以存储在带有静态成员变量的夹具中。例如:

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

    SetUpTestCase 在第一个参数测试开始前调用,TearDownTestCase 在最后一个参数测试结束后调用。您可以在这些函数中创建/删除共享资源。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多