写googletests工作在预定义的对象上

时间:2016-10-04 08:06:38

标签: c++ unit-testing googletest fixtures

我想在一个对象上编写单元测试。与普通灯具的不同之处在于,我不希望灯具在每次测试之前运行。夹具的SetUp()应该只运行一次,然后进行几次测试。在这些测试之后,应该执行夹具的TearDown()。 我在c ++中使用googletest。是否有可能实现这种行为?

清除示例:

#include "gtest/gtest.h"
class socketClientFixture : public testing::Test
{
public:
    CSocketClient *mClient;
    void SetUp()
    {
        mClient = new CSocketClient();
        mClient->connect();
    }
    void TearDown()
    {
        mClient->disconnect();
        delete mClient;
}
TEST_F(socketClientFixture, TestCommandA)
{
    EXPECT_TRUE(mClient->commandA());
}
TEST_F(socketClientFixture, TestCommandB)
{
    EXPECT_TRUE(mClient->commandA());
}
int  main(int ac, char* av[])
{
    ::testing::InitGoogleTest(&ac, av);
    int res = RUN_ALL_TESTS();
    return res;
}

在上面的示例中,我不希望在TestCommandB之前的TestCommandA和SetUp()之后调用TearDown()。 我想要实现的行为是:

  1. 设置()
  2. TestCommandA
  3. TestCommandB
  4. TearDown中()
  5. 这是因为服务器在断开连接以执行某些操作后需要一些时间。

    任何帮助表示感谢。

1 个答案:

答案 0 :(得分:0)

没有内置的方法可以满足您的要求,特别是因为您要求订购测试。

您可以在高级Google测试文档

中从this section中提取更多创意

如果您愿意牺牲测试订单,可以按照上面链接中给出的确切示例来定义static void SetUpTestCase()static void TearDownTestCase()。为该类编写的任何测试都将参与同一个夹具。

  

请注意,如果您可以完全避免这种情况并将连接实例化为模拟(请参阅google-mock),那将是一个更好的选择。这会将您的测试与您要连接的服务器分离,这样您就可以测试代码而不是测试服务器。这也将使您的测试运行得更快。