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

googletest中参数化测试的一般问题,googletest,Googletest,背景:我正在为传入流量编写会话表。此表应包含所有活动的UDP/TCP连接 我正在使用googletest包来测试我的实现。 我准备了一个基于夹具的参数化测试,格式如下: class SessionTest - initialize all staff. struct ConnectionInfo - holds set of connection parameters (IPs, ports, etc..) class SessionTestPrepare : SessionTest , t

背景:我正在为传入流量编写会话表。此表应包含所有活动的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{},  
class SessionTest-初始化所有员工。
struct ConnectionInfo—保存一组连接参数(IP、端口等)
类SessionTestPrepare:SessionTest,testing::WithParamInterface-初始化。
TEST_P(SessionTestPrepare,TEST)-保存测试用例和逻辑。
实例化测试案例(默认,会话测试准备测试::值(
连接信息{},
连接信息{},
连接信息{},
)

我注意到,每次测试新参数时,都会调用SessionTest构造函数和Setup函数(当然还有析构函数和TearDown)。
注意:我的sessionable在这里声明并初始化

  • 是否有办法避免在每组参数测试后调用设置和拆卸
  • 是否有办法在每次测试后保持会话表的状态而不使其成为全局状态(即,在测试第二个连接参数时,第一个连接参数仍在表中)

  • 要在测试夹具中仅运行一次设置和拆卸,请使用
    SetUpTestCase
    TearDownTestCase
    而不是
    SetUp
    TearDown
    。可以使用静态成员变量将设置和拆卸存储在夹具中。例如:

    class SessionTestPrepare : public ::testing::WithParamInterface<ConnectionInfo> //...
    {
    public:
        static void SetUpTestCase();
        static void TearDownTestCase();
    
        static ConnectionInfo * shared_data;
        //...
    }
    
    class SessionTestPrepare:public::testing::WithParamInterface/。。。
    {
    公众:
    静态void SetUpTestCase();
    静态void TearDownTestCase();
    静态连接信息*共享数据;
    //...
    }
    

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

    要在测试夹具中只运行一次设置和拆卸,请使用
    SetUpTestCase
    teardowndtestcase
    而不是
    设置
    拆卸
    。并且可以使用静态成员变量将存储在夹具中。例如:

    class SessionTestPrepare : public ::testing::WithParamInterface<ConnectionInfo> //...
    {
    public:
        static void SetUpTestCase();
        static void TearDownTestCase();
    
        static ConnectionInfo * shared_data;
        //...
    }
    
    class SessionTestPrepare:public::testing::WithParamInterface/。。。
    {
    公众:
    静态void SetUpTestCase();
    静态void TearDownTestCase();
    静态连接信息*共享数据;
    //...
    }
    
    在第一个参数测试开始之前调用
    SetUpTestCase
    ,在最后一个参数测试结束之后调用
    TearDownTestCase
    。您可以在这些函数中创建/删除共享资源