Comment mettre en place des tests unitaires pour Visual Studio C ++

voix
87

Je vais avoir du mal à trouver comment obtenir le cadre de tests mis en place et utilisable dans Visual Studio 2008 C ++ probablement avec la suite de tests unitaires intégré.

Tous les liens ou des tutoriels seraient appréciés.

Créé 06/08/2008 à 08:57
source utilisateur
Dans d'autres langues...                            


12 réponses

voix
55

Cette page peut aider, il passe en revue un bon nombre de cadres de tests unitaires C ++:

  • CppUnit
  • Boost.Test
  • CppUnitLite
  • NanoCppUnit
  • unité ++
  • CxxTest

Consultez CPPUnitLite ou CPPUnitLite2 .

CPPUnitLite a été créé par Michael Feathers, qui à l' origine porté JUnit de Java en C ++ comme cppunit (essaie de cppunit imiter le modèle de développement de JUnit - mais C ++ manque de fonctionnalités de Java [par exemple de réflexion] pour le rendre facile à utiliser).

CPPUnitLite tente de faire un véritable C ++ - framework de test de style, pas de Java un C ++ porté. (Je paraphrase de ce Feather Travailler efficacement avec Legacy Code livre). CPPUnitLite2 semble être une autre réécriture, avec plus de fonctionnalités et corrections de bugs.

Je viens aussi trébuché à travers UnitTest ++ qui comprend des trucs de CPPUnitLite2 et un autre cadre.

Microsoft a publié WinUnit .

Commander également Catch ou doctest

Créé 30/08/2008 à 14:51
source utilisateur

voix
24

Il y a une façon de tester C ++ non géré en utilisant la construction dans le cadre de tests dans Visual Studio 2008 . Si vous créez un C ++ Test de projet, en C ++ / CLI, vous pouvez faire des appels à une DLL non géré. Vous devrez changer le support Common Language Runtime / clr de / clr: sûr si vous voulez tester le code qui a été écrit en C ++ non géré.

J'ai étape par étape les détails ici sur mon blog: http://msujaws.wordpress.com/2009/05/06/unit-testing-mfc-with-mstest/

Créé 05/05/2009 à 14:54
source utilisateur

voix
9

Voici l'approche que j'utilise pour tester le module URL IIS Réécrire chez Microsoft (il est en ligne de commande, mais devrait fonctionner pour VS aussi):

  1. Assurez-vous que vos fichiers d'en-tête sont consommables en déplaçant le code source des fichiers cpp et utiliser avant la déclaration en cas de besoin.
  2. Compiler votre code pour tester en tant que bibliothèque (.lib)
  3. Créer votre projet UnitTest en C ++ avec le soutien CLR.
  4. Inclure vos fichiers d'en-tête.
  5. Inclure vos fichiers .lib.
  6. Ajouter une référence à Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll
  7. Utilisez une classe vraiment petit pour déclarer votre test unitaire et sauter de gestion au code C ++ / natif comme celui-ci (peut avoir des fautes de frappe):

Voici un exemple:

// Example
#include "stdafx.h"
#include "mstest.h"

// Following code is native code.
#pragma unmanaged
void AddTwoNumbersTest() {
  // Arrange
  Adder yourNativeObject;
  int expected = 3;
  int actual;
  // Act
  actual = yourNativeObject.Add(1, 2);
  // Assert
  Assert::AreEqual(expected, actual, L"1 + 2 != 3");
}

// Following code is C++/CLI (Managed)
#pragma managed
using namespace Microsoft::VisualStudio::TestTools::UnitTesting;
[TestClass]
public ref class TestShim {
public:
  [TestMethod]
  void AddTwoNumbersTest() {
     // Just jump to C++ native code (above)
     ::AddTwoNumbersTest();
  }
};

Avec cette approche, les gens ne doivent apprendre trop de choses C ++ / CLI, tout le vrai test se fera en C ++ natif et la classe TestShim sera utilisé pour « publier » le test à MSTest.exe (ou le rendre visible ).

Pour ajouter de nouveaux tests vous déclarez seulement un nouveau [TestMethod] vide Newtest () {:: Newtest ();} méthode et une nouvelle fonction native vide Newtest (). Pas de macros, pas de trucs, straighforward.

Maintenant, le fichier heade est en option, mais il peut être utilisé pour exposer les méthodes de classe Assert avec des signatures C ++ natif (par exemple wchar_t * au lieu de Stirng ^), il peut donc vous pouvez le garder près de C ++ et loin de C ++ / CLI :

Voici un exemple:

// Example
#pragma once
#pragma managed(push, on)
using namespace System;
class Assert {
public:
    static void AreEqual(int expected, int actual) {
        Microsoft::VisualStudio::TestTools::UnitTesting::Assert::AreEqual(expected, actual);
    }

    static void AreEqual(int expected, int actual, PCWSTR pszMessage) {
        Microsoft::VisualStudio::TestTools::UnitTesting::Assert::AreEqual(expected, actual, gcnew String(pszMe
ssage));
    }

    template<typename T>
    static void AreEqual(T expected, T actual) {
        Microsoft::VisualStudio::TestTools::UnitTesting::Assert::AreEqual(expected, actual);
    }

    // Etcetera, other overloads...
}
#pragma managed(pop)

HTH

Créé 01/12/2009 à 22:56
source utilisateur

voix
6

Personnellement, je préfère WinUnit car il ne me demande pas écrire quoi que ce soit , sauf pour mes tests (je construis un .dll comme le test, pas un exe). Je viens de construire un projet, et le point WinUnit.exe à mon test répertoire de sortie et il fonctionne tout ce qu'il trouve. Vous pouvez télécharger ici le projet WinUnit . (MSDN vous demande maintenant télécharger toute la question, et non pas l'article. WinUnit est inclus dans.)

Créé 15/09/2008 à 17:33
source utilisateur

voix
4

Le cadre fourni avec VS9 est .NET, mais vous pouvez écrire des tests en C ++ / CLI, donc tant que vous êtes à l' aise d' apprendre quelques ismes .NET, vous devriez être en mesure de tester la plupart de code C ++.

boost.test et googletest semblent être assez similaire, mais adapté pour des utilisations légèrement différentes. Ces deux éléments ont une composante binaire, vous aurez donc besoin d' un projet supplémentaire dans votre solution pour compiler et exécuter les tests.

Le cadre que nous utilisons est CxxTest , ce qui est beaucoup plus léger; il est uniquement les en- têtes, et utilise un Perl (!) script pour gratter les informations de suite de tests de vos têtes (suites héritent de CxxTest :: Base, tous vos noms méthodes d'essai commencent par « test »). De toute évidence, cela exige que vous obtenez Perl à partir d' une source ou une autre , ce qui ajoute au- dessus de votre construction configuration de l' environnement.

Créé 14/08/2008 à 15:17
source utilisateur

voix
2

Les outils qui ont été mentionnés ici sont tous les outils de ligne de commande. Si vous recherchez une solution plus intégrée, un coup d' oeil au studio CFIX , qui est un add - in Visual Studio pour les tests unitaires C / C ++. Il est tout à fait semblable à TestDriven.Net, mais pour (non géré) C / C ++ plutôt que .NET.

Créé 24/06/2009 à 07:21
source utilisateur

voix
2

J'utilise UnitTest ++ .

Au cours des années écoulées depuis que j'ai fait ce poste la source est passée de SourceForge à GitHub. De plus , le tutoriel exemple est maintenant plus agnostique - ne va pas dans une configuration ou d'un projet mis en place du tout.

Je doute qu'il continuera à fonctionner pour Visual Studio 6 que les fichiers de projet sont maintenant créés par CMake. Si vous avez encore le support de version plus ancienne , vous pouvez obtenir la dernière version disponible sous la SourceForge branche.

Créé 06/08/2008 à 09:28
source utilisateur

voix
1

Je souffrais de mettre en œuvre des tests unitaires pour une application non géré C ++ dans un environnement Windows avec Visual Studio. Alors j'ai réussi à surmonter et écrit un post comme un guide étape par étape pour les tests unitaires d'applications C ++ non géré. J'espère que cela peut vous aider.

test unitaire pour ++ non managé C dans Visual Studio

Créé 07/12/2012 à 09:32
source utilisateur

voix
1

J'aime le CxxTest aussi bien pour les mêmes raisons. Il est un fichier d'en-tête uniquement pas de lien nécessaire. Vous n'êtes pas coincé avec Perl car il y a un coureur Python ainsi. Je vais bientôt en revue la bibliothèque Google. Le truc Boost tire trop beaucoup d'autres bagages.

Créé 27/08/2008 à 19:15
source utilisateur

voix
1

Le testeur de l'unité pour Visual Studio 2008 est uniquement pour le code .NET pour autant que je sais.

Je CppUnit sur Visual Studio 2005 et trouvé qu'il était assez bon.

Pour autant que je me souvienne, la configuration est relativement indolore. Assurez-vous que dans votre test projette l'éditeur de liens (Linker → Entrée → Dépendances supplémentaires) comprend cppunitd.lib.

Ensuite, #include <cppunit/extensions/HelperMacros.h>dans votre tête.

Vous pouvez ensuite suivre les étapes http://cppunit.sourceforge.net/doc/1.11.6/cppunit_cookbook.html pour obtenir votre travail de classe de test.

Créé 19/08/2008 à 18:01
source utilisateur

voix
1

Je ne suis pas sûr à 100% VS2008, mais je sais que le cadre de tests unitaires que Microsoft expédié dans VS2005 dans le cadre de leur Team Suite était seulement pour .NET, et non C ++

Je l'ai utilisé CppUnit aussi et il allait bien. Il en va de même que NUnit / JUnit / ainsi de suite.

Si vous avez utilisé boost, ils ont également une bibliothèque de tests unitaires

Les gars derrière coup de pouce ont des graves côtelettes de codage, donc je dirais que leur cadre devrait être assez bon, mais il pourrait ne pas être le plus facile à utiliser :-)

Créé 12/08/2008 à 00:45
source utilisateur

voix
1

Je l' ai utilisé CppUnit avec VS2005 et Eclipse. Le wiki est très complet (surtout si vous êtes familier avec JUnit).

Créé 12/08/2008 à 00:13
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more