2008-09-20 9 views
2

J'ai récemment commencé à travailler sur un projet de codage personnel utilisant C++ et KDevelop. Bien que j'ai commencé par pirater, je me dis que ça ira mieux à long terme si je mets en place une suite de tests unitaires adéquate avant d'aller trop loin. J'ai créé un exécutable test-runner séparé en tant que sous-projet, et les tests que j'ai ajoutés semblent fonctionner correctement. Jusqu'à présent, le succès. Cependant, j'aimerais vraiment que mes tests unitaires soient exécutés à chaque fois que je construis, pas seulement lorsque je les exécute explicitement. Ce sera particulièrement vrai que je diviser le désordre que j'ai fait dans les bibliothèques de commodité, dont chacun aura probablement son propre exécutable de test. Plutôt que de les exécuter tous à la main, j'aimerais les faire fonctionner comme la dernière étape de mon processus de construction. J'ai regardé toutes les options dans le menu du projet et le gestionnaire d'automake, mais je n'arrive pas à comprendre comment configurer cela.Comment ajouter une étape de construction personnalisée à un projet basé sur automake dans KDevelop?

J'imagine que cela pourrait probablement être fait en éditant le makefile à la main. Malheureusement, mon fichier makefile-fu est un peu faible, et j'ai également peur que KDevelop écrase tout changement que je fais à la main la prochaine fois que je change quelque chose via l'IDE. Par conséquent, s'il y a une option sur la façon de le faire avec KDevelop lui-même, je préférerais de beaucoup aller dans ce sens.

Est-ce que quelqu'un sait comment je pourrais faire en sorte que KDevelop exécute mes exécutables de test dans le cadre du processus de construction? Je vous remercie!

(je ne suis pas 100% liée à KDevelop. Si KDevelop ne peut pas le faire, ou bien s'il y a un IDE qui rend ce beaucoup plus facile, je pourrais être convaincu de changer.)

Répondre

3

Bien que vous pourrait manipuler la valeur par défaut `make` cible pour exécuter vos tests, il est généralement pas recommandée, car chaque invocation de

make

courrait tous les tests. Vous devriez utiliser la cible "check" à la place, qui est un quasi-standard accepté parmi les progiciels. En faisant cela, les essais ne sont démarrés lorsque vous exécutez

make check

Vous pouvez ensuite configurer facilement KDevelop pour exécuter « make check » au lieu de « faire ».

Puisque vous utilisez automake (par KDevelop), vous n'avez pas besoin d'écrire le « vérifier » vous cibler. Au lieu de cela, il suffit d'éditer votre `Makefile.am` et définir certaines variables:

 
TESTS = ... 

S'il vous plaît jeter un oeil à la automake documentation, "Support for test suites" pour plus d'informations.

0

Je l'ai travailler de cette façon:

$ cat src/base64.c 
//code to be tested 
int encode64(...) { ... } 

#ifdef UNITTEST 
#include <assert.h> 
int main(int argc, char* argv[]) 
{ 
    assert(encode64(...) == 0); 
    return 0; 
} 
#endif //UNITTEST 
/* end file.c */ 

$ cat src/Makefile.am 
... 
check_PROGRAMS = base64-test 
base64_test_SOURCES = base64.c 
base64_test_CPPFLAGS = -I../include -DUNITTEST 
TESTS = base64-test 

A make check construirait src/base64-test et l'exécuter:

$ make check 
... 
PASS: base64-test 
================== 
All 1 tests passed 
================== 
... 

Maintenant, je suis en train de résumer tout ce qu'il comme une macro m4 à ​​utiliser comme ceci:

MAKE_UNITTEST(base64.c) 

qui devrait produire quelque chose comme la solution ci-dessus.

Espérons que cela aide.

Questions connexes