Wie Unit-Tests für Visual Studio C ++ einrichten

stimmen
87

Ich habe Probleme, herauszufinden, wie der Test-Framework bekommen eingerichtet und geeignet für Visual Studio 2008 für C ++ vermutlich mit der Unit-Test-Suite integriert.

Alle Links oder Tutorials würde geschätzt.

Veröffentlicht am 06/08/2008 um 08:57
quelle vom benutzer
In anderen Sprachen...                            


12 antworten

stimmen
55

Diese Seite kann helfen , überprüft er eine ganze Reihe von C ++ Unit - Test - Frameworks:

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

Schauen Sie sich CPPUnitLite oder CPPUnitLite2 .

CPPUnitLite wurde von Michael Feathers erstellt, der ursprünglich Java JUnit C portiert ++ als CPPUnit (CPPUnit versucht , das Entwicklungsmodell von JUnit imitieren - aber C ++ fehlt Java-Funktionen [zB Reflexion] , um es zu benutzen , machen einfach).

CPPUnitLite versucht, eine echte C zu machen ++ - Stil - Test - Framework, kein Java ein portiert C ++. (Ich bin paraphrasieren von Feathers Effektives Arbeiten mit Legacy Code Buch). CPPUnitLite2 scheint mit mehr Features und Bugfixes andere Rewrite, zu sein.

Ich auch stolperte über Unittest ++ , die Sachen aus CPPUnitLite2 und einem anderen Rahmen umfasst.

Microsoft hat WinUnit .

Auch Kasse Fang oder doctest

Beantwortet am 30/08/2008 um 14:51
quelle vom benutzer

stimmen
24

Es gibt einen Weg nicht verwaltete C ++ zu testen das im Test - Framework gebaut unter Verwendung von Visual Studio 2008 . Wenn Sie ein C ++ Testprojekt erstellen, unter Verwendung von C ++ / CLI, können Sie Anrufe an eine nicht verwaltete DLL machen. Sie haben die Common Language Runtime Unterstützung / clr von / clr wechseln: sicher , wenn Sie den Code testen möchten , die in nicht verwalteten 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/

Beantwortet am 05/05/2009 um 14:54
quelle vom benutzer

stimmen
9

Hier ist der Ansatz, den ich verwende, um das IIS-URL Rewrite-Modul in Microsoft zu testen (es ist Befehlszeile basiert, soll aber für VS arbeiten):

  1. Stellen Sie sicher, dass die Header-Dateien Verbrauch sind durch Quellcode Verschieben von Dateien auf CPP und mit Vorwärtsdeklaration, wenn nötig.
  2. Stellen Sie sich Ihren Code als Bibliothek zu testen (LIB)
  3. Erstellen Sie Ihr Projekt als Unittest C ++ mit CLR-Unterstützung.
  4. Fügen Sie Ihre Header-Dateien.
  5. Fügen Sie Ihre LIB-Dateien.
  6. Fügen Sie einen Verweis auf Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll
  7. Verwenden Sie eine wirklich kleine Klasse für die Erklärung Ihrer Unit-Test und springen von Managed C ++ / Native Code wie folgt (kann Fehler haben):

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 Menschen müssen auch nicht lernen viel C ++ / CLI, durch den wirklichen Test wird in C ++ erfolgen nativen und die TestShim Klasse wird auf ‚Veröffentlichen‘ um den Test zu MSTest.exe verwendet werden (oder macht es sichtbar ).

Für neue Tests Hinzufügen erklären Sie gerade ein neues [Testmethod] Leere Newtest () {:: Newtest ();} Verfahren und eine neue Lücke Newtest () native Funktion. Keine Makros, keine Tricks, straighforward.

Nun ist die heade Datei optional, aber es kann verwendet werden, um die Assert Klasse Methoden mit C ++ nativen Signaturen (zB wchar_t * statt Stirng ^) zu, so dass es können Sie es in der Nähe C halten ++ und weit von C ++ / CLI :

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

Beantwortet am 01/12/2009 um 22:56
quelle vom benutzer

stimmen
6

Persönlich ziehe ich WinUnit da es mich nicht verlangen , etwas zu schreiben , außer für meine Tests (baue ich eine DLL als Test, keine exe). Ich baue gerade ein Projekt, und zeigen WinUnit.exe auf meinem Testausgabeverzeichnis und es läuft alles , was es findet. Sie können das WinUnit Projekt hier downloaden . (MSDN erfordert jetzt Sie die gesamte Ausgabe zum Download, nicht in dem Artikel. WinUnit innerhalb enthalten ist.)

Beantwortet am 15/09/2008 um 17:33
quelle vom benutzer

stimmen
4

Das Framework enthielt mit VS9 ist .NET, aber man kann so lange in C ++ / CLI, so Tests schreiben , wie Sie bequem sind einig .NET - isms lernen, sollten Sie in der Lage sein , die meisten jeden C ++ Code zu testen.

boost.test und googletest Blick als ziemlich ähnlich, aber für etwas andere Anwendungen angepasst. Beide haben eine binäre Komponente, so dass Sie ein zusätzliches Projekt in Ihrer Lösung benötigen zu kompilieren und die Tests ausführen.

Der Rahmen , den wir verwenden , ist CxxTest , das ist viel leichter; es ist nur Header und verwendet ein Perl (!) Skript - Testsuite Informationen von Ihrem Header zu kratzen (Suiten erben von CxxTest :: Base, alle Testmethoden Namen beginnen mit ‚test‘). Offensichtlich ist dies erfordert , dass Sie Perl Suche von einer Hand oder einem anderen , die Overhead zu Ihrem Build - Umgebung Setup erstellt.

Beantwortet am 14/08/2008 um 15:17
quelle vom benutzer

stimmen
2

Die Werkzeuge , die hier erwähnt wurden , sind alle Kommandozeilen - Tools. Wenn Sie sich für eine integrierte Lösung zu suchen, hat einen Blick auf cfix Studio , das ein Visual Studio AddIn für C / C ++ Unit - Tests ist. Es ist ganz ähnlich wie TestDriven.Net, aber für (unmanaged) C / C ++ statt .NET.

Beantwortet am 24/06/2009 um 07:21
quelle vom benutzer

stimmen
2

Ich benutze Unittest ++ .

In den Jahren seit ich diesen Beitrag aus der Quelle wird von Source auf Github bewegt. Auch das Beispiel Tutorial ist jetzt mehr Agnostiker - nicht in jeder Konfiguration oder ein Projekt geht überhaupt aufgebaut.

Ich bezweifle es wird immer noch für Visual Studio 6 arbeiten , wie die Projektdateien jetzt über CMake erstellt werden. Wenn Sie noch die ältere Version Unterstützung benötigen , können Sie die letzte verfügbare Version unter dem bekommen Source Zweig.

Beantwortet am 06/08/2008 um 09:28
quelle vom benutzer

stimmen
1

Ich leide Unit-Tests für eine nicht verwaltete C ++ Anwendung in einer Windows-Umgebung mit Visual Studio zu implementieren. So gelang es mir, einen Posten als Schritt-für-Schritt-Anleitung, um nicht verwaltete C ++ Anwendungs ​​Unit-Tests zu überwinden und schrieb. Ich hoffe, es kann Ihnen helfen.

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

Beantwortet am 07/12/2012 um 09:32
quelle vom benutzer

stimmen
1

Ich mag die CxxTest als auch aus den gleichen Gründen. Es ist eine Header-Datei nur so keine Verknüpfung erforderlich. Sie sind nicht mit Perl stecken, da es ein Python Läufer als gut. Ich werde die Google-Bibliothek bald zu überprüfen. Die Boost Sachen zieht in zu viel anderes Gepäck.

Beantwortet am 27/08/2008 um 19:15
quelle vom benutzer

stimmen
1

Das Gerät Tester für Visual Studio 2008 ist nur für .NET-Code, soweit ich weiß.

Ich benutzen CppUnit auf Visual Studio 2005 und fand es ziemlich gut zu sein.

Soweit ich mich erinnere, war die Einrichtung relativ schmerzlos. So stellen Sie sicher, dass die Linke in Ihrem Testprojekte (Linkers → Eingang → Zusätzliche Abhängigkeiten) enthält cppunitd.lib.

Dann #include <cppunit/extensions/HelperMacros.h>in der Kopfzeile.

Sie können dann die Schritte in folgen http://cppunit.sourceforge.net/doc/1.11.6/cppunit_cookbook.html Ihre Testklasse zum Laufen zu bringen.

Beantwortet am 19/08/2008 um 18:01
quelle vom benutzer

stimmen
1

Ich bin nicht 100% sicher VS2008, aber ich weiß, dass die Unit Testing Framework, das Microsoft in VS2005 als Teil ihres Team Suite ausgeliefert war nur für .NET, nicht C ++

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

Wenn Sie Boost verwendet haben, sie haben auch eine Unit - Test - Bibliothek

Die Jungs hinter Schub haben einige ernsthafte Codierung Koteletts, also würde ich sagen , dass ihre Rahmen ziemlich gut sein sollte, aber es ist vielleicht nicht das benutzerfreundlichste sein :-)

Beantwortet am 12/08/2008 um 00:45
quelle vom benutzer

stimmen
1

Ich habe verwendet CppUnit mit VS2005 und Eclipse. Das Wiki ist sehr gründlich (vor allem , wenn Sie mit JUnit vertraut sind).

Beantwortet am 12/08/2008 um 00:13
quelle vom benutzer

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