написание googletests работа с предопределенным объектом

Я хочу написать работу ведьмы модульного теста на объекте. Разница к нормальным приспособлениям, что я не хочу приспособление быть побежанным перед каждым испытанием. SetUp() приспособления должен быть бегом только раз, тогда несколько испытаний должны быть выполнены. После этих испытаний необходимо выполнить демонтаж() арматуры.
Я использую googletest в C++. Есть ли возможность добиться такого поведения?


Пример для очистки:

#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;
}

В приведенном выше примере я не хочу, чтобы TearDown() вызывался после TestCommandA и SetUp () перед TestCommandB.
Поведение, которого я хочу достичь:

  1. установка()
  2. TestCommandA
  3. TestCommandB
  4. демонтаж()

Это связано с тем, что серверу требуется некоторое время после отключения для выполнения некоторых операций.

Любая помощь ценится.

1 ответ

  1. Нет встроенного способа сделать то, что вы просите, в частности, потому, что вы просите, чтобы тесты были заказаны.

    Вы можете извлечь дополнительные идеи из этого раздела В расширенной документации google-test


    Если вы готовы пожертвовать тестовым заказом, вы можете следовать точному примеру, приведенному в ссылке выше, и определить static void SetUpTestCase()и static void TearDownTestCase(). Любые тесты, написанные для этого класса, будут участвовать в том же самом приспособлении.

    Обратите внимание, что если вы можете избежать этого вообще и инстанцировать соединение как макет (см. google-макет), это было бы гораздо лучшей альтернативой. Это позволит отделить тест от сервера, к которому вы хотите подключиться, чтобы вы могли протестировать свой код вместо тестирования сервера. Это также сделает ваши тесты работать гораздо быстрее.