8
votes

Tests d'unité de compilation croisée avec CPPUnit ou similaire

Quelqu'un a-t-il utilisé un package comme CPPUnit pour compiler des tests d'unité C ++ C ++ pour exécuter sur une plate-forme intégrée?

J'utilise g ++ sur une boîte Linux pour compiler des exécutables qui doivent être exécutés sur une carte Lynxos. Je ne peux pas sembler obtenir aucun des emballages d'unités d'unité communs pour configurer et construire quelque chose qui créera des tests d'unité.

Je vois beaucoup de forfaits de test unitaires, CPPUnit, unitest ++, GTEST, CPPUTEST, etc., mais très peu d'utiliser ces packages dans un scénario de compilateur croisé. Ceux avec un script "Configurer" impliquent que cela est possible, mais je ne peux pas sembler les amener à configurer et à construire.


1 commentaires

Je suis à l'aide de CPPUnit sur Windows et Linux dans un projet de compilation croisé. Pas de problèmes du tout. Quels sont vos problèmes exacts?


6 Réponses :


2
votes

Vous voudrez peut-être regarder cxxtest . Je ne l'ai pas utilisé pour la compilation croisée, mais elle repose entièrement sur des en-têtes et un script Python - pas de bibliothèque compilée. Il pourrait être plus facile de s'adapter que d'autres.


0 commentaires

3
votes

Ma pratique Lorsque le code de test d'unité qui est compilé en croix est de compiler les tests de l'unité elles-mêmes à l'aide de la boîte à outils native - généralement une saveur du compilateur X86. Ces tests d'unités exécutés sur la machine de construction plutôt que sur la cible intégrée. Si vous écrivez des tests d'unité stricts (par opposition aux tests d'intégration) avec des talons et des moqueurs, vous ne devriez pas avoir de dépendances sur du matériel intégré. Sinon ... il n'est jamais trop tard pour commencer.

Un avantage supplémentaire de cette approche est que pour les cibles intégrées non-x86, ce type de test de l'unité contribue à rincer les problèmes d'endansement, des variables non assurées et d'autres bugs intéressants.


0 commentaires

1
votes

Je ne fournis pas une réponse ici, mais je ne prendrais pas l'avis de ne pas exécuter vos tests d'unité sur différentes cibles: vous devez toujours, de préférence à la fois des tests système et unités.

Sinon, des choses simples comme des erreurs d'alignement sur le bras / d'autres processeurs embarqués ne seront pas attrapées.


0 commentaires

0
votes

On dirait que vous devez avoir une bibliothèque de test unitaire compilé pour votre système d'exploitation et votre architecture ainsi que sur votre ou vos machines de développement. Je préfère Boost ++ Cadre de test unitaire pour cela. Vous pouvez soit télécharger quelque chose qui est préféré pour votre architecture, mais devrez généralement la compiler vous-même. J'ai trouvé quelques solutions en googling pour savoir comment croiser un boost (par exemple, HTTP : //goodliffe.blogspot.com/2008/05/cross-Celling-Boost.html ). La CPPUnit pourrait être plus facile à croiser, n'a pas essayé. Le principe général est identique, vous compilez la même version de votre bibliothèque pour votre architecture de développement et pour votre machine cible

Ma configuration pour les nouvelles cibles est de compiler les bibliothèques Boost ++ nécessaire pour mon système d'exploitation cible / arche, puis écrivez des tests pour lier contre Boost ++ Bibliothèques et le code à tester. P>

La prestation est que vous pouvez créer un lien avec votre X86 Linux Boost ++ Libs ou contre votre cible Boost ++ Libs, vous pouvez ainsi exécuter les tests sur votre cible et votre device / Build Machine (s). P>

Ma configuration générale ressemble à ceci: P>

libs/boost/<arch>/<boost libs>
src/foo.{cpp,h}
tests/test_foo.cpp
build/foo
build/test_foo.<arch>


0 commentaires

3
votes
./configure --prefix=/sandBox --build=`config.guess` --host=sh4-linux
sh4-linux is the platform where you want to run the program.

0 commentaires

1
votes

Compiler CpuTest (V3.3), je devais remplacer les variables LD, CXX et CC.

Pour obtenir les bibliothèques CPPUTEST et CPPUTestext (pour CPPumock) et leurs tests construits, j'ai utilisé ce qui suit. Commandes à partir du répertoire CpuTest_Home: p>

pour construire libcputsest.a: p> xxx pré>

pour construire libcppuestext.a (pour cppumock): p>

make extensions LD=sh4-linux-g++ CXX=sh4-linux-g++ CC=sh4-linux-gcc


0 commentaires