Как получить доступ к argc и argv внутри тестового примера в среде Google Test? - PullRequest
10 голосов
/ 10 марта 2011

Я использую Google Test для тестирования своего проекта C ++.Однако в некоторых случаях для загрузки требуемых данных требуется доступ к argc и argv.

В методе main() при инициализации argc и argv передаются в конструктор тестирования.

testing::InitGoogleTest(&argc, argv);

Как я могу получить к ним доступ позже в тесте?

TEST(SomeClass, myTest)
{
  // Here I would need to have access to argc and argv
}

Ответы [ 3 ]

10 голосов
/ 10 марта 2011

Я не знаю тестовый фреймворк Google, так что может быть лучший способ сделать это, но это должно сделать:

//---------------------------------------------
// some_header.h
extern int my_argc;
extern char** my_argv;
// eof
//---------------------------------------------

//---------------------------------------------
// main.cpp
int my_argc;
char** my_argv;

int main(int argc, char** argv)
{    
  ::testing::InitGoogleTest(&argc, argv);
  my_argc = argc;
  my_argv = argv;
  return RUN_ALL_TESTS();
}
// eof
//---------------------------------------------

//---------------------------------------------
// test.cpp
#include "some_header.h"

TEST(SomeClass, myTest)
{
  // Here you can access my_argc and my_argv
}
// eof
//---------------------------------------------

Глобальные переменные не очень красивы, но когда у вас есть только тестовая среда, которая не позволит вам туннелировать некоторые данные из main() на любые тестовые функции, которые у вас есть, они выполняют свою работу.

1 голос
/ 11 марта 2011

При работе в Windows с использованием Visual Studio они доступны в __argc и __argv.

0 голосов
/ 10 марта 2011

Аргументы командной строки вашего тестового исполняемого файла предназначены для тестовой среды , а не для ваших тестов.С ними вы устанавливаете такие вещи, как --gtest_output, --gtest_repeat или --gtest_filter.Тест должен быть, в первую очередь, воспроизводимым , а это не так, если он зависит от того, кто использует «правильные» параметры.

Чего же вы пытаетесь достичь?

...