Frage

Ich habe Probleme herauszufinden, wie ich das Test-Framework einrichten und in Visual Studio 2008 für C++ verwenden kann, vermutlich mit der integrierten Unit-Testing-Suite.

Über Links oder Tutorials wäre ich dankbar.

War es hilfreich?

Lösung

Diese Seite Vielleicht hilft es, es überprüft eine ganze Reihe von C++-Unit-Test-Frameworks:

  • CppUnit
  • Boost.Test
  • CppUnitLite
  • NanoCppUnit
  • Einheit++
  • CxxTest

Kasse CPPUnitLite oder CPPUnitLite2.

CPPUnitLite wurde von Michael Feathers erstellt, der Javas JUnit ursprünglich als CPPUnit auf C++ portiert hat (CPPUnit versucht, das Entwicklungsmodell von JUnit nachzuahmen – aber C++ fehlen die Java-Funktionen [z. B.Reflexion], um die Verwendung zu vereinfachen).

CPPUnitLite versucht, ein echtes Test-Framework im C++-Stil zu erstellen, nicht ein nach C++ portiertes Java-Framework.(Ich paraphrasiere von Feather's Effektives Arbeiten mit Legacy-Code Buch). CPPUnitLite2 scheint eine weitere Neufassung zu sein, mit mehr Funktionen und Fehlerbehebungen.

Ich bin auch gerade darüber gestolpert UnitTest++ Dazu gehören Sachen von CPPUnitLite2 und einem anderen Framework.

Microsoft hat veröffentlicht WinUnit.

Auch Kasse Fangen oder Doktortest

Andere Tipps

Es gibt eine Möglichkeit, nicht verwaltetes C++ mithilfe des integrierten Testframeworks in Visual Studio 2008 zu testen.Wenn Sie mit C++/CLI ein C++-Testprojekt erstellen, können Sie anschließend Aufrufe an eine nicht verwaltete DLL durchführen.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 auf meinem Blog hier: http://msujaws.wordpress.com/2009/05/06/unit-testing-mfc-with-mstest/

Hier ist der Ansatz, den ich verwende, um das IIS-URL-Rewrite-Modul bei Microsoft zu testen (es basiert auf der Befehlszeile, sollte aber auch für VS funktionieren):

  1. Stellen Sie sicher, dass Ihre Header-Dateien nutzbar sind, indem Sie den Quellcode in CPP-Dateien verschieben und bei Bedarf die Vorwärtsdeklaration verwenden.
  2. Kompilieren Sie Ihren Code zum Testen als Bibliothek (.lib)
  3. Erstellen Sie Ihr UnitTest-Projekt als C++ mit CLR-Unterstützung.
  4. Fügen Sie Ihre Header-Dateien hinzu.
  5. Fügen Sie Ihre .lib-Dateien hinzu.
  6. Fügen Sie einen Verweis auf Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll hinzu
  7. Verwenden Sie eine wirklich kleine Klasse zum Deklarieren Ihres Unit-Tests und springen Sie wie folgt vom verwalteten zum C++/Native-Code (möglicherweise mit Tippfehlern):

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 Leute nicht zu viel C++/CLI-Kram lernen, der gesamte eigentliche Test wird in C++ nativ durchgeführt und die TestShim-Klasse wird verwendet, um den Test in MSTest.exe zu „veröffentlichen“ (oder ihn sichtbar zu machen). ).

Um neue Tests hinzuzufügen, deklarieren Sie einfach eine neue [TestMethod] void NewTest(){::NewTest();}-Methode und eine neue native void NewTest()-Funktion.Keine Makros, keine Tricks, unkompliziert.

Nun ist die Header-Datei optional, kann aber verwendet werden, um die Methoden der Assert-Klasse mit nativen C++-Signaturen verfügbar zu machen (z. B.wchar_t* anstelle von Stirng^), damit Sie es nahe an C++ und weit 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 es nicht von mir verlangt wird schreibe nichts außer meinen Tests (Ich erstelle als Test eine DLL, keine Exe).Ich erstelle einfach ein Projekt und verweise WinUnit.exe auf mein Testausgabeverzeichnis, und es führt alles aus, was es findet.Du kannst Laden Sie das WinUnit-Projekt hier herunter.(MSDN erfordert jetzt, dass Sie die gesamte Ausgabe herunterladen, nicht den Artikel.WinUnit ist im Lieferumfang enthalten.)

Das in VS9 enthaltene Framework Ist .NET, aber Sie können Tests in C++/CLI schreiben. Solange Sie also mit dem Erlernen einiger .NET-Ismen vertraut sind, sollten Sie in der Lage sein, fast jeden C++-Code zu testen.

boost.testUnd Googletestscheinen ziemlich ähnlich zu sein, sind aber für leicht unterschiedliche Zwecke angepasst.Beide verfügen über eine Binärkomponente, daher benötigen Sie ein zusätzliches Projekt in Ihrer Lösung, um die Tests zu kompilieren und auszuführen.

Das Framework, das wir verwenden, ist CxxTest, das viel leichter ist;Es sind nur Header und es wird ein Perl-Skript (!) verwendet, um Testsuite-Informationen aus Ihren Headern zu extrahieren (Suites erben von CxxTest::Base, alle Namen Ihrer Testmethoden beginnen mit „test“).Dies setzt natürlich voraus, dass Sie Perl beziehen eine Quelle oder ein anderer, 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 der Beispiel-Tutorial ist jetzt agnostischer – geht überhaupt nicht in irgendeine Konfiguration oder Projekteinrichtung ein.

Ich bezweifle, dass es für Visual Studio 6 noch funktionieren wird, da die Projektdateien jetzt über CMake erstellt werden.Wenn Sie immer noch die Unterstützung älterer Versionen benötigen, können Sie die letzte verfügbare Version unter erhalten SourceForge Zweig.

Bei den hier erwähnten Tools handelt es sich ausschließlich um Befehlszeilentools.Wenn Sie nach einer stärker integrierten Lösung suchen, werfen Sie einen Blick auf cfix-studio, ein Visual Studio-Add-In für C/C++-Einheitentests.Es ist TestDriven.Net ziemlich ähnlich, jedoch für (nicht verwaltetes) C/C++ und nicht für .NET.

Ich habe verwendet CppUnit mit VS2005 und Eclipse.Das Wiki ist sehr ausführlich (insbesondere, wenn Sie mit JUnit vertraut sind).

Bei VS2008 bin ich mir 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++ gedacht war

Ich habe auch CppUnit verwendet und es war in Ordnung.Ähnlich wie NUnit/JUnit/so weiter.

Wenn Sie Boost verwendet haben, sie Ich habe auch eine Unit-Testing-Bibliothek

Die Jungs hinter Boost haben welche ernst Codierungsfehler, 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.Da es sich lediglich um eine Header-Datei handelt, ist keine Verknüpfung erforderlich.Sie bleiben nicht bei Perl hängen, da es auch einen Python-Runner gibt.Ich werde die Google-Bibliothek bald überprüfen.Das Boost-Zeug zieht zu viel anderen Ballast mit sich.

Der Unit-Tester für Visual Studio 2008 ist meines Wissens nur für .NET-Code geeignet.

Ich habe CppUnit in Visual Studio 2005 verwendet und fand es ziemlich gut.

Soweit ich mich erinnere, war der Aufbau 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 deinem Header.

Anschließend können Sie den Schritten in folgen http://cppunit.sourceforge.net/doc/1.11.6/cppunit_cookbook.html damit Ihre Testklasse funktioniert.

Ich hatte Schwierigkeiten, Unit-Tests für eine nicht verwaltete C++-Anwendung in einer Windows-Umgebung mit Visual Studio zu implementieren.Also habe ich es geschafft und einen Beitrag als Schritt-für-Schritt-Anleitung für das Testen nicht verwalteter C++-Anwendungseinheiten geschrieben.Ich hoffe, es kann Ihnen helfen.

Unit-Test für nicht verwaltetes C++ in Visual Studio

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top