GoogleTest: доступ к среде из теста - PullRequest
6 голосов
/ 12 марта 2010

Я пробую gtest для C ++ (среда модульного тестирования Google) и создаю подкласс :: testing :: Environment для инициализации и отслеживания некоторых вещей, которые мне нужны для большинства моих тестов (и не хочу настраивать более одного раза).

Мой вопрос: как я могу получить доступ к содержимому объекта Environment? Я предполагаю, что теоретически я мог бы сохранить Среду в глобальной переменной в моем тестовом проекте, но есть ли лучший способ?

Я пытаюсь сделать тесты для некоторых уже существующих (очень запутанных) вещей, поэтому установка довольно тяжелая.

Ответы [ 2 ]

3 голосов
/ 11 марта 2013

Рекомендуется использовать глобальную переменную, согласно Google Test Documentation :

::testing::Environment* const foo_env = ::testing::AddGlobalTestEnvironment(new FooEnvironment);
0 голосов
/ 07 февраля 2019

A связанный вопрос имеет дело с этим для конкретного случая создания std::string, давая полный ответ, показывающий, как использовать google's :: testing :: Environment, а затем получить доступ к результатам изнутри блока тест.

Воспроизводится оттуда (если вы проголосуете за меня, пожалуйста, проголосуйте и за них):

class TestEnvironment : public ::testing::Environment {
public:
    // Assume there's only going to be a single instance of this class, so we can just
    // hold the timestamp as a const static local variable and expose it through a
    // static member function
    static std::string getStartTime() {
        static const std::string timestamp = currentDateTime();
        return timestamp;
    }

    // Initialise the timestamp in the environment setup.
    virtual void SetUp() { getStartTime(); }
};

class CnFirstTest : public ::testing::Test {
protected:
    virtual void SetUp() { m_string = currentDateTime(); }
    std::string m_string;
};

TEST_F(CnFirstTest, Test1) {
    std::cout << TestEnvironment::getStartTime() << std::endl;
    std::cout << m_string << std::endl;
}

TEST_F(CnFirstTest, Test2) {
    std::cout << TestEnvironment::getStartTime() << std::endl;
    std::cout << m_string << std::endl;
}

int main(int argc, char* argv[]) {
    ::testing::InitGoogleTest(&argc, argv);
    // gtest takes ownership of the TestEnvironment ptr - we don't delete it.
    ::testing::AddGlobalTestEnvironment(new TestEnvironment);
    return RUN_ALL_TESTS();
}
...