2016-05-04 2 views
1

Im использованием GTEST в качестве испытательной базы для моего проекта, и мне нужно использовать следующее значение параметра, который передается в качестве параметра GTEST внутри тестаИспользование GTEST конкретных параметров внутри TestCase

./gtest_bin --gtest_repeat=5

в настоящее время, что я делаю, я создал пользовательский Слушатель простиралась от «EmptyTestEventListener» и передать значение итерации к глобальной переменной, когда обратный вызов следующей функции получен следующим образом,

customListener класса

class customListener : public testing::EmptyTestEventListener 
{ 
    customListener(int *iteration) : m_iteration(iteration) {} 

    virtual void OnTestIterationStart(const testing::UnitTest& unit_test, int iteration) 
    { 
     *m_iteration = iteration; 
    } 
} 

главный

int g_iteration; 

int main(int argc, char **argv) 
{ 
    testing::InitGoogleTest(&argc, argv); 

    if(argc > 1) 
     g_array_length = atoi(argv[1]); 

    testing::TestEventListeners& listners = testing::UnitTest::GetInstance()->listeners(); 
    listners.Append(new printers::customListener(&g_iteration)); 

    return RUN_ALL_TESTS(); 
} 

Есть более простой способ, чтобы получить значение этого параметра GTEST?

Если обобщен, есть ли способ получить какое-либо конкретное значение параметра, которое может использоваться внутри тестового теста?

+0

Есть ли 'g_iteration' и' g_array_length' то же самое? – PiotrNycz

+0

'g_array_length' - полностью отдельная переменная, вы можете ее игнорировать – BAdhi

ответ

1

ВАЖНО Пожалуйста, используйте с большой осторожностью - так как это не документировано особенность и может быть изменен (т.е. он может перестать работать) в следующих GTEST/gmock версий.

Вы можете получить доступ к любому знаку ::testing::GTEST_FLAG(flag_name) - в вашем случае - ::testing::GTEST_FLAG(repeat).

Я получил эту информацию косвенно из этого manual и рассмотрел файл gtest.h.

+0

Спасибо за информацию. После того, как вы упомянули о флаге, я проверил самые быстрые переменные. Но в самой последней версии, которую я использую в настоящее время, данный объект является переменной - ':: testing :: FLAGS_ <имя_параметра>, поэтому в этом случае: :: тестирование :: FLAGS_gtest_repeat'. Так точно, как вы упомянули в примечании – BAdhi

+0

'GTEST_FLAG' - это макрос, который определяется как' #define GTEST_FLAG (name) FLAGS_gtest _ ## name' - поэтому мы оба правильные, но я считаю, что моя версия немного безопаснее ... – PiotrNycz