Gtest: глобальный доступ к автоматической переменной в нескольких тестах - PullRequest
0 голосов
/ 19 сентября 2018

Мне нужно установить глобальную переменную type, которая может использоваться несколькими тестами и в идеале всеми тестами в нескольких тестовых файлах.

Пожалуйста, найдите мой скрипт ниже, из-за которого я получаю следующую ошибку: error: non-static data member declared 'auto'.

В идеале я хотел бы знать, как я могу объявить эту глобальную переменную так, чтобы ее можно было использовать в нескольких .cpp файлах.Любая помощь будет высоко оценен!

Спасибо

customerTest.cpp:

namespace {
    class custTest : public ::testing::Test {
    protected:
        custTest() {
            type = new TYPE();
        }
        virtual ~custTest() {
            delete type;
            type = nullptr;
        }
        auto type; //this is the global variable that I would like to use across multiple tests
    };

    TEST_F(custTest, openPort) {
        type->defineMap();
        ...
    }   

} 

1 Ответ

0 голосов
/ 20 сентября 2018

Я думаю, что проблема в том, что компилятор не имеет никакого способа узнать, какой тип данных должен содержаться в вашем классе type.Боюсь, auto здесь не сработает, потому что он предназначен для случаев, когда компилятор может определить фактический тип объекта из контекста, а вы его не предоставили.(Мы, читатели, можем посмотреть в другом месте в классе и найти type = new TYPE(); и сделать из этого вывод, но, насколько я знаю, auto может смотреть только на оператор, инициализирующий его объект.)

Как действовать, затем?Если вы не знаете, какой тип переменной использовать, вы можете написать шаблон или, если тип является одним из небольшого набора возможностей, вы можете использовать std::variant.

Что касается того, чтобы сделать его доступным в качестве глобальной переменной: я не думаю, что вам нужно делать что-то особенное, помимо того, что вы обычно делаете для глобальной: объявите это в заголовочном файле, определите его висходный файл, и включите заголовок, где это необходимо.Обычные соображения применяются.Подумайте, действительно ли это должно быть глобальным.Поместите его в соответствующее пространство имен, чтобы не загрязнять глобальное пространство имен.И так далее.

...