Vă mulțumim pentru susținere

Cum se configurează unitatea de testare pentru Visual Studio C ++

Am probleme în a afla cum să configureze cadrul de testare și să se poată folosi în Visual Studio 2008 pentru C, probabil cu ajutorul suitei de testare unitate încorporată.

Orice link-uri sau tutoriale ar fi apreciate.

0
adăugat editat
de fapt nu am folosit niciuna dintre ele. Am hotărât că ceea ce lucram la testele pe unități nu a fost cea mai eficientă utilizare a timpului.
adăugat autor DShook
Google lansează C ++ Test Framework, care este foarte similar cu cadrele xUnit. http://code.google.com/p/googletest/
adăugat autor popopome
Ce cadru ati folosit?
adăugat autor Joakim Karlsson

11 răspunsuri

Nu sunt sigur 100% despre VS2008, dar știu că cadrul de testare a unității pe care Microsoft la trimis în VS2005 ca parte a suitei Team Team a fost doar pentru .NET, nu pentru C ++

Am folosit și CppUnit și a fost bine. La fel ca NUnit / JUnit / așa mai departe.

If you've used boost, they also have a unit testing library

Tipii din spatele impulsului au niște cotlete grave , așadar aș spune că cadrul lor ar trebui să fie destul de bun, dar ar putea să nu fie cel mai ușor de utilizat :-)

0
adăugat

Eu folosesc UnitTest ++ .

În anii de când am făcut acest post, sursa sa mutat de la SourceForge la github. De asemenea, tutorial exemplu este acum mai agnostic - nu intră într-o configurație sau un proiect înființat deloc.

Mă îndoiesc că va funcționa în continuare pentru Visual Studio 6, deoarece fișierele de proiect sunt acum create prin CMake. Dacă aveți nevoie de suportul versiunii mai vechi, puteți obține ultima versiune disponibilă în SourceForge ramură.

0
adăugat

There is a way to test unmanaged C++ using the built in testing framework within Visual Studio 2008. If you create a C++ Test Project, using C++/CLI, you can then make calls to an unmanaged DLL. You will have to switch the Common Language Runtime support to /clr from /clr:safe if you want to test code that was written in unmanaged C++.

I have step by step details on my blog here: http://msujaws.wordpress.com/2009/05/06/unit-testing-mfc-with-mstest/

0
adăugat
Acest lucru nu face anumite restricții în codul dvs. C, am cel puțin o bază de cod în cazul în care încercarea de a include anteturile sale în codul C / CLI a fost mai multe probleme decât a fost în valoare. Marele beneficiu pentru mine de a folosi C ++ / CLI este că puteți utiliza testarea parametrică funky cu atribute precum RowTest în mbUnit / NUnit / xUnit.Net
adăugat autor Andy Dent
Multumesc, ma bucur ca este posibil, multumesc :)
adăugat autor DanDan

Am fost nevoit să pună în aplicare unitatea de testare pentru o aplicație C ++ neangajate într-un mediu Windows cu Visual Studio. Așadar, am reușit să depășesc și să scriu un post ca o îndrumare pas cu pas către testarea unităților de aplicații C ++ neangajate. Sper că vă poate ajuta.

Test unitate pentru C ++ neangajat în Visual Studio

0
adăugat

The unit tester for Visual Studio 2008 is only for .NET code as far as I know.

I used CppUnit on Visual Studio 2005 and found it to be pretty good.

Din câte îmi amintesc, configurația era relativ nedureroasă. Doar asigurați-vă că în proiectele dvs. de testare linkerul (Linker? Input? Dependencies Additional) include cppunitd.lib.

Then, #include in your header.

Puteți urma pașii din http://cppunit.sourceforge.net/doc /1.11.6/cppunit_cookbook.html pentru a obține clasa de testare care funcționează.

0
adăugat

This page may help, it reviews quite a few C++ unit test frameworks:

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

Consultați CPPUnitLite sau CPPUnitLite2 .

CPPUnitLite was created by Michael Feathers, who originally ported Java's JUnit to C++ as CPPUnit (CPPUnit tries mimic the development model of JUnit - but C++ lacks Java's features [e.g. reflection] to make it easy to use).

CPPUnitLite încearcă să facă un adevărat cadru de testare în stilul C ++, nu un Java care este portat la C ++. (Parafrazesc din cartea Feather despre cartea "Lucrând efectiv cu codul vechi") din Lucrul eficient cu codul vechi . CPPUnitLite2 pare să fie o altă rescriere, cu mai multe caracteristici și corecții de erori.

De asemenea, am dat peste UnitTest ++ > care include lucruri din CPPUnitLite2 și alte cadre.

Microsoft a lansat WinUnit .

Also checkout Catch or Doctest

0
adăugat
Sunt surprins Catch nu este menționat aici. De asemenea, checkout doctest - reimplementarea mea de captură cu un accent mare pe viteza de compilare - checkout Întrebări frecvente pentru a vedeți ce este diferit între cele două
adăugat autor onqtam
@onqtam nu fi prea surprins, această întrebare / răspuns a fost din 2008! V-ați adăugat linkuri sugerate.
adăugat autor Aardvark
Googletest este foarte similar cu testul boost :: but un ușor de integrat în VS
adăugat autor Martin Beckett
adăugat autor inazaruk

Cadrul inclus cu VS9 este .NET, dar puteți scrie teste în C ++ / CLI, atâta timp cât sunteți confortabil învățând unele ISM-uri .NET, ar trebui să puteți testa majoritatea oricărui cod C ++ .

boost.test and googletest look to be fairly similar, but adapted for slightly different uses. Both of these have a binary component, so you'll need an extra project in your solution to compile and run the tests.

Cadrul pe care îl folosim este CxxTest , care este mult mai ușor; este vorba numai de anteturi și utilizează un script Perl (!) pentru a scana informațiile despre suita de test din anteturile dvs. (suitele moștenite de la CxxTest :: Base, toate denumirile metodei de testare încep cu "test"). Evident, acest lucru necesită obținerea de Perl de la o singură sursă sau alt , care adaugă aeriene la configurarea mediului dvs. de construire.

0
adăugat
De asemenea, trebuie să aveți grijă cu privire la orice DLL-uri cerute de codul dvs. - Am avut probleme cu codurile NUnit și mbUnit de testare a codului C ++ / CLI, încercând să fie încărcate DLL-uri.
adăugat autor Andy Dent
CxxTest poate folosi python în loc de perl
adăugat autor Martin Beckett

Personal, prefer WinUnit , deoarece nu-mi cere să < href = "http://www.wintellect.com/cs/blogs/jrobbins/archive/2008/01/17/winunit-an-outstanding-native-c-unit-testing-tool.aspx" rel = "noreferrer" > scrie orice altceva decât pentru testele mele (construiesc un .dll ca test, nu un exe). Am construit doar un proiect, și punctul WinUnit.exe la directorul meu de ieșire de testare și se execută tot ce găsește. Puteți să descărca proiectul WinUnit aici . (MSDN vă cere acum să descărcați întreaga problemă, nu articolul WinUnit este inclus în.)

0
adăugat
Rețineți că WinUnit sa mutat de atunci la CodePlex winunit.codeplex.com
adăugat autor Andy Dent

Am folosit CppUnit cu VS2005 și Eclipse. Wiki este foarte aprofundată (mai ales dacă sunteți familiarizat cu JUnit).

0
adăugat

Îmi place și CxxTest din aceleași motive. Este doar un fișier antet, deci nu este necesară nicio legătură. Nu sunteți blocat cu Perl, deoarece există și un alergător Python. Voi revizui curând biblioteca Google. Lucrurile Boost trag prea mult alte bagaje.

0
adăugat

Iată abordarea pe care o folosesc pentru a testa modulul IIS URL Rewrite la Microsoft (este bazat pe linia de comandă, dar ar trebui să funcționeze și pentru VS):

  1. Asigurați-vă că fișierele antet pot fi consumabile prin mutarea codului sursă în fișierele cpp și utilizând declarația înainte dacă este necesar.
  2. Compilați codul pentru a testa ca bibliotecă (.lib)
  3. Creați-vă proiectul UnitTest sub formă de C ++ cu suport CLR.
  4. Includeți fișierele cu antet.
  5. Includeți fișierele .lib.
  6. Adăugați o referință la Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll
  7. Utilizați o clasă foarte mică pentru a declara unitatea de testare și a sări de la gestionat la C ++ / Codul nativ ca acesta (poate să aibă un text):

Iată un exemplu:

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

Cu această abordare, oamenii nu trebuie să învețe prea multe chestii C ++ / CLI, tot testul real va fi făcut în C ++ nativ, iar clasa TestShim va fi utilizată pentru a "publica" testul la MSTest.exe (sau a face vizibil ).

Pentru adăugarea de noi teste, declarați o nouă metodă nouă [TestMethod] void NewTest () {:: NewTest ();} și o funcție nativă nouă NewTest (). Fără macros, fără trucuri, îndreptate.

Acum, fișierul heade este opțional, dar poate fi folosit pentru a expune metodele clasei Assert cu semnături native C ++ (de exemplu, wchar_t * în loc de Stirng ^), astfel încât să puteți să o păstrați aproape de C ++ și departe de C ++ / CLI :

Iată un exemplu:

// 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
    static void AreEqual(T expected, T actual) {
        Microsoft::VisualStudio::TestTools::UnitTesting::Assert::AreEqual(expected, actual);
    }

    // Etcetera, other overloads...
}
#pragma managed(pop)

HTH

0
adăugat