J'essaie de lancer un test unitaire. Je regarde quelques frameworks C++ et je veux essayer Boost.Test. La documentation semble très complète, et c'est un peu écrasant, en particulier quelqu'un de nouveau aux tests unitaires. Donc, voici une situation que je veux:Pour commencer à utiliser Boost.Test
Disons que j'ai 2 classes, Foo
et Bar
. Je veux écrire une suite de tests pour Foo
et une suite de tests pour Bar
, de préférence dans des fichiers différents. Je ne veux exécuter les tests que si j'exécute le programme avec un paramètre de ligne de commande. Donc, mon main()
devrait ressembler à:
int main(int argc, const char* argv[])
{
if (argc == 1 && strcmp(argv[0], "-test") == 0)
run_all_tests();
else
return program_main(argc, argv);
}
Je pense que test_foo.cpp
devrait être quelque chose comme:
#include "foo.hpp"
#define BOOST_TEST_MODULE Foo test
#include <boost/test/unit_test.hpp>
BOOST_AUTO_TEST_SUITE(Foo_Test)
BOOST_AUTO_TEST_CASE(Foo1)
{
Foo f;
BOOST_CHECK(f.isValid());
}
BOOST_AUTO_TEST_CASE(Foo2)
{
Foo f;
BOOST_CHECK(f.baz() == 5);
}
BOOST_AUTO_TEST_SUITE_END()
Cependant, je ne sais pas (1) ce que la commande réelle pour exécuter les tests est, et (2) comment dire à la bibliothèque que je veux exécuter TOUT le test.
Alors, qui a de l'expérience avec Boost.Test? Quelqu'un peut-il aider d'une manière détaillée? Merci beaucoup.
Je ne comprends pas ... comment lancez-vous le programme normalement (sans test)? – rlbond
fondamentalement votre test_foo.cpp devrait être construit comme un seul programme .exe et un lien vers votre bibliothèque qui contient des classes Foo & Bar. Un des fichiers d'en-tête boost.test définit déjà la fonction principale, donc je ne pense pas que ce que vous avez proposé soit faisable. – oscarkuo
En fait il y a. C'est ce qu'on appelle console_test_runner. Bien que ce ne soit pas pertinent pour le problème d'OP car il a déjà une main. –