Comment puis-je construire un test unitaire googletest utilisant la bibliothèque gtest_main avec Jam?

StackOverflow https://stackoverflow.com/questions/3893569

  •  28-09-2019
  •  | 
  •  

Question

Je suis en train de construire un test unitaire googletest pour une preuve de concept comme un nouveau cadre de tests unitaires que nous pourrions utiliser. En googletest, il y a deux façons d'écrire un test unitaire: avec principale, ou sans principal. Si vous ne définissez pas principal, vous pouvez créer un lien dans la bibliothèque de gtest_main, qui comprend une fonction principale () pour vous, vous permettant d'économiser du temps. Dans mon environnement, nous utilisons Jam pour construire les binaires. J'ai obtenu le binaire pour compiler avec main () dans mon code et en utilisant la bibliothèque libgtest, mais je suis à la recherche de la façon de construire dans Jam sans le principal.

Cas de base (avec une fonction main ()):

Je suis en mesure de construire un binaire avec ceci:

Main MyUnitTestBinary : MyClass.cpp ;
LinkLibraries MyUnitTestBinary : libgtest ;
Library libgtest : $(GTEST_DIR)/src/gtest-all.cc ;

boîtier cassé (sans fonction main ()):

Je ne suis pas en mesure de construire un binaire avec cela. Je vois beaucoup d'erreurs lorsque je tente de relier les objets:

Main sample1_unittest : sample1.cc sample1_unittest.cc ;
LinkLibraries sample1_unittest : gtest_main ;
Library gtest_main : $(GTEST_DIR)/src/gtest_main.cc ;

Je reçois beaucoup d'erreurs Linker relatives à la référence non définie à blah. La référence non définie semble provenir de l'essai :: espace interne, ce qui ne fait pas partie de mon code.

Toute réflexion sur la façon dont je peux attaquer cela, ou venir chercher plus d'indices sur le problème?

Était-ce utile?

La solution

J'ai trouvé la réponse! Je tort de ne pas ajouter libgtest et gtest_main au binaire. Je pensais que gtest_main comprenait également les définitions pour le cadre, et vous besoin de relier l'un ou l'autre. En fait, vous devez toujours relier libgtest, et vous devez relier gtest_main seulement si vous ne voulez pas changer la fonction principale () standard.

Alors ... la réponse correcte est d'ajouter:

LinkLibraries sample1_unittest : libgtest gtest_main ;
Library libgtest : $(GTEST_DIR)/src/gtest-all.cc ;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top