2017-02-01 5 views
0

J'ai beaucoup de tests unitaires Boost. Je ne peux pas trouver l'endroit où je devrais mettre mon gestionnaire de signal. Il n'y a pas de fonction main() dans les fichiers du répertoire de tests unitaires. Il semble que main() est caché dans certaines macros.Puis-je installer un gestionnaire de signal pour les tests unitaires Boost?

En unit_test.hpp je vois:

namespace boost { namespace unit_test { 

int BOOST_TEST_DECL unit_test_main(init_unit_test_func init_func, int argc, char* argv[]); 

} 

Mais comment puis-je mettre ma propre fonction main(), pour être en mesure de définir un gestionnaire de signal là-bas?

+1

Vous pouvez désactiver la génération de la fonction principale et fournir votre propre un . Un exemple est [ici] (http://www.boost.org/doc/libs/1_63_0/libs/test/doc/html/boost_test/utf_reference/link_references/link_boost_test_no_main.html) – mkaes

+0

Merci pour la réponse! – JimmyY

Répondre

0

selon les instructions here, vous pouvez fournir votre propre fonction main pour définir le gestionnaire de signal est ici un code adopté pour cela:.

#define BOOST_TEST_MODULE custom_main 
#define BOOST_TEST_NO_MAIN 
#define BOOST_TEST_ALTERNATIVE_INIT_API 
#include <boost/test/included/unit_test.hpp> 
#include <iostream> 

#include <unistd.h> 
#include <signal.h> 

void signalHandler(int sig) 
{ 
    std::cerr << "Inside signal handler" << std::endl; 
} 

namespace utf = boost::unit_test; 

BOOST_AUTO_TEST_CASE(test1) 
{ 
    BOOST_TEST(false); 
} 

int main(int argc, char* argv[], char* envp[]) 
{ 
    signal(SIGINT, signalHandler); 
    signal(SIGTERM, signalHandler); 
    return utf::unit_test_main(init_unit_test, argc, argv); 
} 
+0

Merci beaucoup! – JimmyY

+0

Peut-être savez-vous comment forcer l'unité à tester les tests de sortie de tous les tests qu'elle exécute? Google unittests a des options -v. Mais cela ne fonctionne pas pour les tests unitaires de boost. THX. – JimmyY

+0

Vous pouvez essayer le commutateur de ligne de commande '--log-level = all' – Smeeheey