Comment configurer les tests unitaires pour Visual Studio C ++

Translate

J'ai du mal à comprendre comment configurer et utiliser le cadre de test dans Visual Studio 2008 pour C ++, vraisemblablement avec la suite de tests unitaires intégrée.

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

This question and all comments follow the "Attribution Required."

Toutes les réponses

Translate

Cette pagepeut aider, il passe en revue plusieurs frameworks de tests unitaires C ++:

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

Check-outCPPUnitLiteouCPPUnitLite2.

CPPUnitLitea été créé par Michael Feathers, qui portait à l'origine JUnit de Java en C ++ en tant que CPPUnit (CPPUnit essaie d'imiter le modèle de développement de JUnit - mais C ++ manque des fonctionnalités de Java [par exemple, la réflexion] pour le rendre facile à utiliser).

CPPUnitLite tente de créer un véritable framework de test de style C ++, pas un Java porté en C ++. (Je paraphrase de Feather'sTravailler efficacement avec le code héritélivre).CPPUnitLite2semble être une autre réécriture, avec plus de fonctionnalités et de corrections de bogues.

Je suis aussi juste tombé surUnitTest ++qui inclut des trucs de CPPUnitLite2 et d'un autre framework.

Microsoft a publiéWinUnit.

Commander égalementCaptureouDoctest

La source
Translate

Il existe un moyen de tester le C ++ non managé à l'aide du cadre de test intégré dans Visual Studio 2008. Si vous créez un projet de test C ++, à l'aide de C ++ / CLI, vous pouvez ensuite effectuer des appels à une DLL non gérée. Vous devrez basculer la prise en charge du Common Language Runtime vers / clr à partir de / clr: safe si vous souhaitez tester du code qui a été écrit en C ++ non managé.

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

La source
Translate

Voici l'approche que j'utilise pour tester le module de réécriture d'URL IIS chez Microsoft (il est basé sur la ligne de commande, mais devrait également fonctionner pour VS):

  1. Assurez-vous que vos fichiers d'en-tête sont consommables en déplaçant le code source vers les fichiers cpp et en utilisant la déclaration avant si nécessaire.
  2. Compilez votre code à tester en tant que bibliothèque (.lib)
  3. Créez votre projet UnitTest en C ++ avec le support CLR.
  4. Incluez vos fichiers d'en-tête.
  5. Incluez vos fichiers .lib.
  6. Ajouter une référence à Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll
  7. Utilisez une très petite classe pour déclarer votre test unitaire et passez du code managé 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 n'ont pas à apprendre trop de choses C ++ / CLI, tout le vrai test sera fait en C ++ natif et la classe TestShim sera utilisée pour `` publier '' le test sur MSTest.exe (ou le rendre visible ).

Pour ajouter de nouveaux tests, déclarez simplement une nouvelle méthode [TestMethod] void NewTest () {:: NewTest ();} et une nouvelle fonction native void NewTest (). Pas de macros, pas d'astuces, directement

Maintenant, le fichier heade est facultatif, mais il peut être utilisé pour exposer les méthodes de la classe Assert avec des signatures natives C ++ (par exemple wchar_t * au lieu de Stirng ^), afin que vous puissiez le garder proche 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

La source
Translate

Personnellement, je préfèreWinUnitcar cela ne m'oblige pas àécrire n'importe quoi sauf mes tests(Je construis un .dll comme test, pas un exe). Je viens de créer un projet, et je pointe WinUnit.exe vers mon répertoire de sortie de test et il exécute tout ce qu'il trouve. Vous pouveztéléchargez le projet WinUnit ici. (MSDN vous oblige maintenant à télécharger l'intégralité du numéro, pas l'article. WinUnit est inclus dans.)

La source
Translate

Le framework inclus avec VS9is.NET, mais vous pouvez écrire des tests en C ++ / CLI, donc tant que vous êtes à l'aise pour apprendre certains ismes .NET, vous devriez pouvoir tester la plupart des codes C ++.

boost.testetgoogletestsemblent assez similaires, mais adaptés à des utilisations légèrement différentes. Les deux ont un composant 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 estCxxTest, qui est beaucoup plus léger; c'est uniquement les en-têtes et utilise un script Perl (!) pour extraire les informations de la suite de tests de vos en-têtes (les suites héritent de CxxTest :: Base, tous les noms de vos méthodes de test commencent par "test"). Évidemment, cela nécessite que vous obteniez Perl deune sourceouun autre, ce qui ajoute une surcharge à la configuration de votre environnement de construction.

La source
Translate

j'utiliseUnitTest ++.

Depuis que j'ai publié ce message, la source est passée de SourceForge à github. Égalementexemple de tutorielest maintenant plus agnostique - n'entre pas du tout dans une configuration ou un projet mis en place.

Je doute que cela fonctionnera toujours pour Visual Studio 6 car les fichiers de projet sont maintenant créés via CMake. Si vous avez toujours besoin de la prise en charge de l'ancienne version, vous pouvez obtenir la dernière version disponible sous leSourceForgebranche.

La source
Ernest Lee
Translate

Les outils qui ont été mentionnés ici sont tous des outils de ligne de commande. Si vous recherchez une solution plus intégrée, jetez un œil àstudio cfix, qui est un complément Visual Studio pour les tests unitaires C / C ++. Il est assez similaire à TestDriven.Net, mais pour C / C ++ (non géré) plutôt que .NET.

La source
Translate

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

La source
Translate

Je ne suis pas sûr à 100% de VS2008, mais je sais que le framework de test unitaire fourni par Microsoft dans VS2005 dans le cadre de leur Team Suite était uniquement pour .NET, pas C ++

J'ai aussi utilisé CppUnit et tout allait bien. Semblable à NUnit / JUnit / ainsi de suite.

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

Les gars derrière Boost en ontsérieuxcôtelettes de codage, donc je dirais que leur cadre devrait être assez bon, mais ce n'est peut-être pas le plus convivial :-)

La source
Translate

J'aime aussi le CxxTest pour les mêmes raisons. C'est un fichier d'en-tête uniquement, donc aucune liaison n'est requise. Vous n'êtes pas coincé avec Perl car il existe également un runner Python. Je vais bientôt passer en revue la bibliothèque Google. Le matériel Boost emporte trop d'autres bagages.

La source
Translate

Le testeur d'unité pour Visual Studio 2008 est uniquement pour le code .NET pour autant que je sache.

J'ai utilisé CppUnit sur Visual Studio 2005 et je l'ai trouvé assez bon.

Autant que je me souvienne, la configuration était relativement indolore. Assurez-vous simplement que dans vos projets de test, l'éditeur de liens (Linker → Input → Additional Dependencies) inclut cppunitd.lib.

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

Vous pouvez ensuite suivre les étapes dehttp://cppunit.sourceforge.net/doc/1.11.6/cppunit_cookbook.htmlpour que votre classe de test fonctionne.

La source
Translate

Je souffrais d'implémenter des tests unitaires pour une application C ++ non gérée dans un environnement Windows avec Visual Studio. J'ai donc réussi à surmonter et à rédiger un article comme guide étape par étape pour les tests unitaires d'applications C ++ non gérées. J'espère que cela peut vous aider.

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

La source