2009-04-06 8 views
1

Quelle est l'efficacité de la structure de test CXX, étant donné que vous écrivez des cas de test unitaires autour du code que vous avez écrit. Un bogue dans le code pourrait également se traduire par un bug dans le code de test unitaire? N'est-ce pas quelque chose comme deux négatifs font un positif?Cadre de test CXX pour C++

En outre, le temps et les efforts consacrés à CXX sont au moins égaux sinon supérieurs à l'effort de codage.

Besoin de votre avis à ce sujet puisque je ne suis pas en faveur de ce cadre étant utilisé dans mon projet et je cherche des points forts pour s'y opposer. En revanche, si vous pensez que c'est bénéfique, s'il vous plaît éclairer moi :).

Répondre

2

CXX n'est pas très actif, et le test d'unité d'écriture implique généralement beaucoup d'efforts. Mais quand le premier refactoring arrive, vous êtes très reconnaissant de l'effort dépensé. J'ai utilisé Boost.Test & CPPUNIT. Je préférerais un peu Boost.Test, mais oui, vous devez écrire vos propres projets, fichiers, etc.

Si vous connaissez un outil pour générer votre squelette à partir de votre code, je suis tout ouïe. :)

Je vous suggère d'essayer Boost.Test et CPPUNIT. Si vous pensez qu'il y a mieux, cela vous donnera de bonnes chances de vous opposer à CXXUNIT car vous proposerez des alternatives.

+0

Il n'est pas nécessaire que CxxTest soit actif. Contrairement à CppUnit, il est complet et simple à utiliser. C'est seulement la maladresse vient de la politique de dépendance no <*stream>. –

+1

Je suis désolé d'être en désaccord, mais il est important d'utiliser un logiciel maintenu. Que se passe-t-il quand cela devient incompatible avec votre compilateur? Quand il y a un bug? Vous le faites vous-même? –

+4

Dans d'autres cas, j'ai peut-être accepté. CxxTest n'utilise pas de modèles C++ avancés, ne nécessite pas de RTTI, n'exige pas d'exceptions, ni la plupart de la bibliothèque standard pour être compatible avec la plupart des compilateurs plus anciens et futurs. Et si je dois patcher l'outil, je le ferai, c'est un framework très simple. –

2

J'utilise cxxtest. Les tests régressifs sont une tâche coûteuse que nous utilisons uniquement pour valider nos bibliothèques logicielles, qui fournissent une couche indépendante de la plate-forme pour nos applications. C'est pour s'assurer que tous les changements n'affecteront pas la stabilité du code depuis tant d'applications et de projets et en dépendent.

Nous couplons cxxtest avec une analyse de couverture pour garantir que la couverture de test est suffisante et également avec CruiseControl pour l'automatiser.

Mais nous ne faisons pas cela pour les applications. Trop d'effort.

La création d'une application de test est tout aussi difficile que l'écriture de toute la bibliothèque elle-même. Je suis d'accord que vous aurez besoin de savoir si cela vaut la peine.

Je pense que Joel a quelque chose à dire à ce sujet aussi: http://www.joelonsoftware.com/items/2009/01/31.html

+0

"Nous couplons cxxtest avec une analyse de couverture pour garantir que la couverture de test est suffisante et également avec CruiseControl pour l'automatiser." Comment avez-vous fait cela? Quel est l'outil de couverture? –

+0

Nous utilisons VectorCAST. Il permet l'instrumentation du code source avant qu'il ne soit transmis au compilateur. – sep

4

Google propose un framework de test C++ fantastique que je l'ai utilisé ... Je jamais utilisé tout autre framework de test C++, et avait limité expérience avec Junit, et j'ai été en mesure de ramasser très rapidement rapidement, car la documentation est bonne. Il est important d'utiliser un bon cadre de test, car les tests sont trop importants pour être abandonnés en raison de la frustration liée au cadre. Voici un lien:

http://code.google.com/p/googletest/

Hope this helps!

0

Je préfère les frameworks de test en-tête seulement, voici deux d'entre eux: TUT et Catch. J'ai utilisé TUT auparavant dans plusieurs projets, et j'ai trouvé Catch il n'y a pas longtemps.

1) TUT - C++ Framework Modèle Test Unit

TUT est un petit cadre portable de test unitaire pour C++.

  • TUT est très portable, peu importe quel compilateur ou OS que vous utilisez.
  • TUT est constitué uniquement de fichiers d'en-tête. Aucune bibliothèque requise, le déploiement n'a jamais été aussi facile.
  • L'interface reporter personnalisée permet d'intégrer TUT avec pratiquement n'importe quel IDE ou outil dans le monde.
  • Prise en charge des tests multiprocessus (le test des blocages et des délais d'attente est en cours).
  • TUT est gratuit et distribué sous licence BSD.
  • Les tests sont organisés en groupes de tests nommés.
  • Régression (tous les tests dans l'application), exécution d'un seul groupe ou d'un test.
  • Pure C++, pas de macros!

2) Catch - Un moderne, C++ - natif, en-tête uniquement, cadre de tests unitaires, TDD et BDD

Quel est le piège? Catch est synonyme de cas de test automatisés C++ dans les en-têtes et est un cadre de test automatisé multi-paradigme pour C++ et Objective-C (et, peut-être, C). Il est implémenté entièrement dans un ensemble de fichiers d'en-tête, mais est emballé comme un en-tête unique pour plus de commodité.