我想在一个对象上编写单元测试。与普通灯具的不同之处在于,我不希望灯具在每次测试之前运行。夹具的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()。 我想要实现的行为是:
这是因为服务器在断开连接以执行某些操作后需要一些时间。
任何帮助表示感谢。
答案 0 :(得分:0)
没有内置的方法可以满足您的要求,特别是因为您要求订购测试。
您可以在高级Google测试文档
中从this section中提取更多创意如果您愿意牺牲测试订单,可以按照上面链接中给出的确切示例来定义static void SetUpTestCase()
和static void TearDownTestCase()
。为该类编写的任何测试都将参与同一个夹具。
请注意,如果您可以完全避免这种情况并将连接实例化为模拟(请参阅google-mock),那将是一个更好的选择。这会将您的测试与您要连接的服务器分离,这样您就可以测试代码而不是测试服务器。这也将使您的测试运行得更快。