Интеграция «Google Test» и «Опции программы Boost» - PullRequest
2 голосов
/ 17 февраля 2011

У меня есть программа, которая использует google test, и библиотеку опций программы boost для разбора опций.Проблема в том, что в тесте Google также есть свои собственные парсеры опций, поэтому мне нужно отфильтровать их перед тем, как передать тест в Google.

Например, когда я запускаю привет, я использую следующее

hello --option1=X --gtest_filter=Footest.*

- опция1 - это опция, которую я использую перед передачей параметра --gtest_filter в тест Google.

Когда я запускаю следующий код, я получаю исключение, поскольку --gtest_filter не является опцией, которую я использую для опций программы повышения.Как я могу объединить те параметры, которые не распознаются расширенными параметрами программы, для ввода gtest?

#include <boost/program_options.hpp>
namespace po = boost::program_options;

#include <iostream>
#include <fstream>
#include <iterator>
using namespace std;

#include <gtest/gtest.h>   

int main(int argc, char **argv) {
    // filter out the options so that only the google related options survive
    try {
        int opt;
        string config_file;

        po::options_description generic("Generic options");
        generic.add_options()
            ("option1,o", "print version string")
            ;

            ...           
    }
    catch(exception& e) // *****************
    {
        cout << e.what() << "\n";
        return 1;
    } 

    testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}

Ответы [ 2 ]

2 голосов
/ 25 марта 2011

InitGoogleTest удастся удалить опции, о которых Google Test знает, а оставшуюся часть оставить в argv.argc также будет соответствующим образом скорректировано.Просто вызовите InitGoogleTest перед другим кодом синтаксического анализа опции.

1 голос
/ 17 февраля 2011

Я нашел возможность игнорировать неизвестные опции на этой странице - http://www.boost.org/doc/libs/1_45_0/doc/html/program_options/howto.html#id2075428

store(po::command_line_parser(argc, argv).
         options(cmdline_options).positional(p).allow_unregistered().run(), vm);
...