Einrichten von Komponententests für Visual Studio C ++

  • Ich habe Schwierigkeiten, herauszufinden, wie das Testframework eingerichtet und in Visual Studio 2008 für C ++ verwendet werden kann, vermutlich mit der integrierten Einheitstestsuite.

    Alle Links oder Tutorials werden gebeten.

    15 October 2009
    Peter Mortensen
10 answers
  • Es gibt eine Möglichkeit, nicht verwaltetes C ++ mit dem integrierten Testframework in Visual Studio 2008 zu testen . Wenn Sie ein C ++ - Testprojekt mit C ++ / CLI erstellen, können Sie Aufrufe an eine nicht verwaltete DLL vornehmen. Sie müssen die Unterstützung für die Common Language Runtime von / clr: safe wechseln, 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 /

    04 December 2009
    Jared
  • Dies ist der Ansatz, den ich zum Testen des IIS-URL-Rewrite-Moduls bei Microsoft verwende (es ist Befehlszeilen-basiert, sollte aber auch für VS funktionieren):

    1. Stellen Sie sicher, dass Ihre Header-Dateien verwendet werden können, indem Sie den Quellcode in CPP-Dateien verschieben und bei Bedarf die Forward-Deklaration 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 ein.
    5. Fügen Sie Ihre .lib-Dateien hinzu. < / li>
    6. Fügen Sie einen Verweis auf Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll hinzu.
    7. Verwenden Sie eine wirklich kleine Klasse für die Deklaration Ihres Unit-Tests und springen Sie von verwaltet nach C ++ / Native Code wie folgt (möglicherweise Tippfehler):

    Hier 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();
      }
    };
     

    Bei diesem Ansatz müssen die Leute nicht zu viel C ++ / CLI-Sachen lernen. Alle eigentlichen Tests werden in C ++ nativ durchgeführt und die TestShim-Klasse wird verwendet. Veröffentlichen Sie den Test in MSTest.exe (oder machen Sie ihn sichtbar).

    Für Addin Für neue Tests deklarieren Sie einfach eine neue [TestMethod] void NewTest () {:: NewTest ();} - Methode und eine neue native void NewTest () - Funktion. Keine Makros, keine Tricks, geradlinig.

    Jetzt ist die Hauptdatei optional, aber sie kann verwendet werden, um die Methoden der Assert-Klasse mit nativen C ++ - Signaturen (z. B. wchar_t *) anzuzeigen von Stirng ^), so kann man es in der Nähe von C ++ und weit weg von C ++ / CLI halten:

    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

    02 December 2009
    aracntido
  • Ich persönlich bevorzuge WinUnit , da dies nicht der Fall ist ' Dazu muss ich Schreibe alles außer für meine Tests (Ich baue eine .dll als Test, kein Exe). Ich erstelle ein Projekt und verweise mit WinUnit.exe auf mein Testausgabeverzeichnis. Es führt alles aus, was gefunden wird. Sie können das WinUnit-Projekt hier herunterladen . (Für MSDN muss jetzt das gesamte Problem heruntergeladen werden, nicht der Artikel. WinUnit ist in enthalten.)

    15 September 2008
    Jonas Nyrup
  • Das in VS9 enthaltene Framework ist .NET. Sie können jedoch Tests in C ++ / CLI schreiben. Solange Sie sich mit .NET Isms vertraut fühlen, sollten Sie dies können um fast jeden C ++ - Code zu testen.

    boost.test und googletest sehen ziemlich ähnlich aus, sind aber für etwas andere Zwecke geeignet. Beide haben eine binäre Komponente. Sie benötigen also ein zusätzliches Projekt in Ihrer Lösung, um die Tests zu kompilieren und auszuführen.

    Das von uns verwendete Framework ist CxxTest , was viel leichter ist; Es handelt sich dabei nur um Header und verwendet ein Perl (!) - Skript, um die Test-Suite-Informationen von Ihren Headern zu kratzen (Suites erben von CxxTest :: Base, alle Namen Ihrer Testmethoden beginnen mit "Test"). Dies erfordert natürlich, dass Sie Perl von einer Quelle oder ein weiterer , der die Einrichtung Ihrer Build-Umgebung zusätzlich belastet.

    14 August 2008
    Ben Straub
  • Ich verwende UnitTest ++ .

    In den Jahren, seit ich diesen Beitrag erstellt habe, hat sich die Quelle von SourceForge zu Github bewegt. Auch das Tutorial ist jetzt agnostischer - es wird keinerlei Konfiguration oder Projekt verwendet.

    Ich bezweifle, dass Visual Studio 6 weiterhin als Projektdateien verwendet werden kann werden jetzt über CMake erstellt. Wenn Sie noch Unterstützung für ältere Versionen benötigen, können Sie die letzte verfügbare Version unter SourceForge herunterladen Zweig.

    05 August 2016
    graham.reedsAllDayPiano
  • Bei den hier erwähnten Tools handelt es sich ausschließlich um Befehlszeilen-Tools. Wenn Sie nach einer stärker integrierten Lösung suchen, werfen Sie einen Blick auf cfix studio , einem Visual Studio AddIn für C / C ++ - Unit-Tests. Es ist TestDriven.Net ziemlich ähnlich, jedoch für (nicht verwaltetes) C / C ++ und nicht für .NET.

    22 May 2017
    Peter Mortensen
  • Ich hatte Probleme mit der Implementierung von Komponententests für eine nicht verwaltete C ++ - Anwendung in einer Windows-Umgebung mit Visual Studio. So gelang es mir, einen Beitrag als Schritt-für-Schritt-Anleitung zum Testen von nicht verwalteten C ++ - Anwendungseinheiten zu überwinden und zu schreiben. Ich hoffe, es kann Ihnen helfen.

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

    22 May 2017
    Peter Mortensen
  • Ich mag den CxxTest aus den gleichen Gründen. Es ist nur eine Header-Datei, daher ist keine Verknüpfung erforderlich. Sie hängen nicht mit Perl fest, da es auch einen Python-Läufer gibt. Ich werde die Google-Bibliothek in Kürze überprüfen. Das Boost-Zeug zieht zu viel anderes Gepäck ein.

    27 August 2008
    ZebZiggle
  • Ich bin nicht absolut sicher über VS2008, 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, werden sie hat auch eine Komponententestbibliothek

    Die Jungs hinter boost haben einige < strong> ernsthafte Codierungs-Chops, also würde ich sagen, dass ihr Framework ziemlich gut sein sollte, aber es ist möglicherweise nicht das benutzerfreundlichste: -)

    12 August 2008
    Orion Edwards
  • Der Gerätetester für Visual Studio 2008 ist, soweit ich weiß, nur für .NET-Code.

    Ich habe CppUnit für Visual Studio 2005 verwendet und fand es ziemlich gut.

    Soweit ich mich erinnere, war das Setup relativ schmerzlos. Stellen Sie nur sicher, dass der Linker (Linker → Eingabe → Zusätzliche Abhängigkeiten) in Ihren Testprojekten cppunitd.lib enthält.

    Then, #include <cppunit/extensions/HelperMacros.h> in Ihrem Header.

    Sie können dann die Schritte in http://cppunit.sourceforge.net/doc/1.11.6/cppunit_cookbook.html Ihre Testklasse funktioniert.

    22 May 2017
    Peter Mortensen