Ich habe Probleme , herauszufinden , wie der Test - Framework bekommen eingerichtet und geeignet für Visual Studio 2008 für C++
vermutlich mit der Einbaugerät Test - Suite.
Alle Links oder Tutorials wäre dankbar.
Ich habe Probleme , herauszufinden , wie der Test - Framework bekommen eingerichtet und geeignet für Visual Studio 2008 für C++
vermutlich mit der Einbaugerät Test - Suite.
Alle Links oder Tutorials wäre dankbar.
Antworten:
Diese Seite kann hilfreich sein, da sie einige C ++ - Unit-Test-Frameworks überprüft:
Schauen Sie sich CPPUnitLite oder CPPUnitLite2 an .
CPPUnitLite wurde von Michael Feathers erstellt, der Javas JUnit ursprünglich als CPPUnit nach C ++ portierte (CPPUnit versucht, das Entwicklungsmodell von JUnit nachzuahmen - in C ++ fehlen jedoch die Funktionen von Java [z. B. Reflection], um die Verwendung zu vereinfachen).
CPPUnitLite versucht, ein echtes Testframework im C ++ - Stil zu erstellen, kein Java-Framework, das auf C ++ portiert ist. (Ich paraphrasiere aus Feathers Buch "Effektiv mit Legacy-Code arbeiten "). CPPUnitLite2 scheint ein weiteres Umschreiben mit mehr Funktionen und Fehlerkorrekturen zu sein.
Ich bin auch gerade auf UnitTest ++ gestoßen, das Inhalte von CPPUnitLite2 und einem anderen Framework enthält.
Microsoft hat WinUnit veröffentlicht .
Es gibt eine Möglichkeit, nicht verwaltetes C ++ mithilfe des in Visual Studio 2008 integrierten Testframeworks zu testen . Wenn Sie ein C ++ - Testprojekt mit C ++ / CLI erstellen, können Sie eine nicht verwaltete DLL aufrufen. Sie müssen die Common Language Runtime-Unterstützung von / clr: safe auf / clr umstellen, wenn Sie Code testen möchten, der in nicht verwaltetem C ++ geschrieben wurde.
Ich habe Schritt für Schritt Details in meinem Blog hier: http://msujaws.wordpress.com/2009/05/06/unit-testing-mfc-with-mstest/
Hier ist der Ansatz, mit dem ich das IIS URL Rewrite-Modul bei Microsoft teste (es ist befehlszeilenbasiert, sollte aber auch für VS funktionieren):
Hier ist ein Beispiel:
// 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();
}
};
Mit diesem Ansatz müssen die Benutzer nicht zu viel C ++ / CLI lernen, der gesamte eigentliche Test wird in C ++ native durchgeführt und die TestShim-Klasse wird verwendet, um den Test in MSTest.exe zu veröffentlichen (oder sichtbar zu machen) ).
Zum Hinzufügen neuer Tests deklarieren Sie einfach eine neue [TestMethod] void NewTest () {:: NewTest ();} Methode und eine neue void NewTest () native Funktion. Keine Makros, keine Tricks, geradlinig.
Die Heade-Datei ist jetzt optional, kann jedoch verwendet werden, um die Methoden der Assert-Klasse mit nativen C ++ - Signaturen (z. B. wchar_t * anstelle von Stirng ^) verfügbar zu machen, sodass Sie sie nahe an C ++ und weit entfernt von C ++ / CLI halten können ::
Hier ist ein Beispiel:
// 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
Persönlich bevorzuge ich WinUnit, da ich nur meine Tests schreiben muss (ich erstelle eine DLL als Test, keine Exe). Ich erstelle gerade ein Projekt und zeige WinUnit.exe auf mein Testausgabeverzeichnis und es führt alles aus, was es findet. Sie können das WinUnit-Projekt hier herunterladen . (Für MSDN müssen Sie jetzt die gesamte Ausgabe herunterladen, nicht den Artikel. WinUnit ist im Lieferumfang enthalten.)
Das in VS9 enthaltene Framework ist .NET. Sie können jedoch Tests in C ++ / CLI schreiben. Solange Sie mit dem Erlernen einiger .NET-Ismen vertraut sind, sollten Sie in der Lage sein, fast jeden C ++ - Code zu testen.
boost.test und googletest sehen ziemlich ähnlich aus, sind jedoch für leicht unterschiedliche Verwendungszwecke geeignet. Beide haben eine binäre Komponente, sodass Sie in Ihrer Lösung ein zusätzliches Projekt benötigen, um die Tests zu kompilieren und auszuführen.
Das Framework, das wir verwenden, ist CxxTest , das viel leichter ist. Es handelt sich nur um Header und verwendet ein Perl (!) - Skript, um Informationen zur Testsuite aus Ihren Headern zu entfernen (Suites erben von CxxTest :: Base, alle Namen Ihrer Testmethoden beginnen mit "test"). Dies erfordert natürlich, dass Sie Perl von der einen oder anderen Quelle beziehen , was den Aufwand für die Einrichtung Ihrer Build-Umgebung erhöht.
Ich benutze UnitTest ++ .
In den Jahren, seit ich diesen Beitrag verfasst habe, ist die Quelle von SourceForge zu Github gewechselt. Auch das Beispiel-Tutorial ist jetzt agnostischer - es wird überhaupt keine Konfiguration oder kein Projekt eingerichtet.
Ich bezweifle, dass es für Visual Studio 6 weiterhin funktioniert, da die Projektdateien jetzt über CMake erstellt werden. Wenn Sie weiterhin die Unterstützung für ältere Versionen benötigen, können Sie die letzte verfügbare Version im SourceForge- Zweig herunterladen .
Die hier erwähnten Tools sind alle Befehlszeilen-Tools. Wenn Sie nach einer stärker integrierten Lösung suchen, schauen Sie sich cfix studio an , ein Visual Studio AddIn für C / C ++ - Komponententests. Es ist TestDriven.Net ziemlich ähnlich, jedoch für (nicht verwaltetes) C / C ++ und nicht für .NET.
Ich bin mir bei VS2008 nicht 100% sicher, aber ich weiß, dass das Unit-Testing-Framework, das Microsoft in VS2005 als Teil seiner Team Suite ausgeliefert hat, nur für .NET und nicht für C ++ war
Ich habe auch CppUnit verwendet und es war in Ordnung. Ähnlich wie NUnit / JUnit / so weiter.
Wenn Sie Boost verwendet haben, verfügen sie auch über eine Unit-Testing-Bibliothek
Die Jungs hinter Boost haben einige ernsthafte Codierungsprobleme, daher würde ich sagen, dass ihr Framework ziemlich gut sein sollte, aber es ist möglicherweise nicht das benutzerfreundlichste :-)
Aus den gleichen Gründen gefällt mir auch der CxxTest. Es ist nur eine Header-Datei, daher ist keine Verknüpfung erforderlich. Sie sind nicht an Perl gebunden, da es auch einen Python-Runner gibt. Ich werde bald die Google-Bibliothek überprüfen. Das Boost-Zeug zieht zu viel anderes Gepäck ein.
Der Unit-Tester für Visual Studio 2008 ist meines Wissens nur für .NET-Code.
Ich habe CppUnit in Visual Studio 2005 verwendet und fand es ziemlich gut.
Soweit ich mich erinnere, war das Setup relativ schmerzlos. Stellen Sie einfach sicher, dass in Ihren Testprojekten der Linker (Linker → Eingabe → Zusätzliche Abhängigkeiten) cppunitd.lib enthält.
Dann #include <cppunit/extensions/HelperMacros.h>
in Ihrem Header.
Sie können dann die Schritte unter http://cppunit.sourceforge.net/doc/1.11.6/cppunit_cookbook.html ausführen , damit Ihre Testklasse funktioniert.
Ich hatte Probleme, Unit-Tests für eine nicht verwaltete C ++ - Anwendung in einer Windows-Umgebung mit Visual Studio zu implementieren. So gelang es mir, einen Beitrag zu überwinden und als schrittweise Anleitung zum Testen nicht verwalteter C ++ - Anwendungseinheiten zu schreiben. Ich hoffe es kann dir helfen.