2011-02-17 2 views
2

J'ai un programme qui utilise google test, et augmente la bibliothèque d'options du programme pour les options d'analyse. Le problème est que google test a aussi ses propres parseurs d'options, donc j'ai besoin de filtrer avant de donner les options au test de google.Intégration de 'google test' et 'boostez les options du programme'

Par exemple, quand je lance bonjour je l'utilise comme suit

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

--option1 est l'option que j'utilise avant de passer l'option --gtest_filter à l'épreuve Google.

Lorsque j'exécute le code suivant, j'ai une exception car --gtest_filter n'est pas l'option que j'utilise pour les options du programme boost. Comment est-ce que je peux combiner ces options que les options de programme de poussée ne reconnaissent pas pour donner l'entrée de 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(); 
} 

Répondre

1

InitGoogleTest va remove les options Google test a connaissance et laisser le reste dans argv. argc sera également ajusté en conséquence. Il suffit de mettre l'appel à InitGoogleTest avant l'autre code d'analyse d'option.