Je vais avoir du mal à trouver comment obtenir le cadre de tests mis en place et utilisable dans Visual Studio 2008 pour C++
probablement avec la suite test intégré dans l' unité.
Tous les liens ou tutoriels seraient appréciés.
Je vais avoir du mal à trouver comment obtenir le cadre de tests mis en place et utilisable dans Visual Studio 2008 pour C++
probablement avec la suite test intégré dans l' unité.
Tous les liens ou tutoriels seraient appréciés.
Réponses:
Cette page peut vous aider, elle passe en revue plusieurs frameworks de tests unitaires C ++:
Découvrez CPPUnitLite ou CPPUnitLite2 .
CPPUnitLite é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, 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 le livre Working Effectively with Legacy Code de Feather ). CPPUnitLite2 semble être une autre réécriture, avec plus de fonctionnalités et de corrections de bogues.
Je suis également tombé sur UnitTest ++ qui comprend des éléments de CPPUnitLite2 et d'un autre cadre.
Microsoft a publié WinUnit .
Il existe un moyen de tester le C ++ non managé à l'aide du framework 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/
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):
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, il suffit de déclarer une nouvelle méthode [TestMethod] void NewTest () {:: NewTest ();} et une nouvelle fonction native void NewTest (). Pas de macros, pas de trucs, sans détour.
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 ^), vous pouvez donc 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
Personnellement, je préfère WinUnit car il ne m'oblige à rien écrire sauf pour 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 pouvez télécharger le projet WinUnit ici . (MSDN vous oblige maintenant à télécharger l'intégralité du numéro, pas l'article. WinUnit est inclus dans.)
Le framework inclus avec VS9 est .NET, mais vous pouvez écrire des tests en C ++ / CLI, donc tant que vous êtes à l'aise pour apprendre certains ismes .NET, vous devriez être en mesure de tester la plupart des codes C ++.
boost.test et googletest semblent assez similaires, mais adaptés pour 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 framework que nous utilisons est CxxTest , 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 d' une source ou d' une autre , ce qui ajoute une surcharge à la configuration de votre environnement de construction.
J'utilise UnitTest ++ .
Dans les années depuis que j'ai publié ce message, la source est passée de SourceForge à github. De plus, l' exemple de didacticiel est désormais plus indépendant - il 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 encore besoin du support de l'ancienne version, vous pouvez obtenir la dernière version disponible sous la branche SourceForge .
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 à cfix studio , 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.
Je ne suis pas sûr à 100% de VS2008, mais je sais que le framework de test unitaire que Microsoft a livré dans VS2005 dans le cadre de leur Team Suite était uniquement pour .NET, pas C ++
J'ai aussi utilisé CppUnit et tout allait bien. À peu près identique à NUnit / JUnit / ainsi de suite.
Si vous avez utilisé boost, ils ont également une bibliothèque de tests unitaires
Les gars derrière boost ont de sérieux problèmes de codage, donc je dirais que leur cadre devrait être plutôt bon, mais ce n'est peut-être pas le plus convivial :-)
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.
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 de http://cppunit.sourceforge.net/doc/1.11.6/cppunit_cookbook.html pour faire fonctionner votre classe de test.
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.