关于googletest中参数化测试的一般问题

时间:2017-04-06 09:41:17

标签: googletest

背景:我正在为传入流量编写一个Session表。该表应包含所有活动的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. 有没有办法在每次测试后保持会话表的状态而不使其全局(即在测试第二个连接参数时,第一个仍在表中)?

1 个答案:

答案 0 :(得分:4)

要在测试夹具中运行设置和拆卸一次,请使用.htaccessSetUpTestCase代替TearDownTestCaseSetUpshared resources可以使用静态成员变量存储在fixture中。例如:

TearDown
在第一个参数测试开始之前调用

class SessionTestPrepare : public ::testing::WithParamInterface<ConnectionInfo> //... { public: static void SetUpTestCase(); static void TearDownTestCase(); static ConnectionInfo * shared_data; //... } ,并在最后一个参数测试结束后调用SetUpTestCase。您可以在这些函数中创建/删除共享资源。