Jak nastavit jednotky testování pro Visual Studio C ++

hlasů
87

Mám potíže se přijít na to, jak se dostat rámec testování nastavení a použitelné ve Visual Studio 2008 pro C ++ pravděpodobně s vestavěným testovací jednotka apartmá.

Jakékoliv odkazy nebo konzultace by ocenili.

Položena 06/08/2008 v 08:57
zdroj uživatelem
V jiných jazycích...                            


12 odpovědí

hlasů
55

Tato stránka může pomoci, přezkoumává nemálo C ++ jednotka testovací rámců:

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

Podívejte se na CPPUnitLite nebo CPPUnitLite2 .

CPPUnitLite byl vytvořen Michael peří, kteří původně přenesených Java JUnit k C ++ jako CppUnit (CppUnit snaží napodobit model rozvojovou JUnit - ale C ++ chybí Java je funkce [například odrazové], aby bylo snadné použití).

CPPUnitLite pokusí vytvořit skutečnou C ++ - style testování rámec, není Java jeden portován na C ++. (Já parafrázovat z peří je Efektivní práce s Legacy Kód knihy). CPPUnitLite2 se zdá být jiný přepis, s více funkcemi a opravami chyb.

Také jsem právě narazil UnitTest ++ , která obsahuje věci z CPPUnitLite2 a některé další rámce.

Společnost Microsoft vydala WinUnit .

Také pokladny Catch nebo doctest

Odpovězeno 30/08/2008 v 14:51
zdroj uživatelem

hlasů
24

Existuje způsob, jak otestovat neřízený C ++ pomocí vestavěného testování rámec v rámci Visual Studio 2008 . Pokud vytvoříte C ++ testovací projekt, pomocí C ++ / CLI, pak můžete volat Nespravovaná DLL. Budete muset přejít podpory Common Language Runtime na / clr z / clr: bezpečné, pokud si chcete vyzkoušet kód, který byl napsán v Nespravovaná C ++.

Mám krok za krokem informace o mém blogu zde: http://msujaws.wordpress.com/2009/05/06/unit-testing-mfc-with-mstest/

Odpovězeno 05/05/2009 v 14:54
zdroj uživatelem

hlasů
9

Zde je přístup, mohu použít k testování modul URL IIS přepis na Microsoft (to je založené příkazového řádku, ale měl by fungovat pro VS příliš):

  1. Ujistěte se, že vaše hlavičkové soubory jsou spotřební pohybem zdrojový kód CPP soubory a v případě potřeby s použitím dopředu prohlášení.
  2. Kompilace kódu otestovat, jak knihovna (LIB)
  3. Vytvořte si svůj projekt UnitTest jako C ++ s podporou CLR.
  4. Zahrnout své hlavičkové soubory.
  5. Zahrnout své lib soubory.
  6. Přidejte odkaz na Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll
  7. Použijte opravdu malou třídu pro vyhlášení své jednotce test a skok od podařilo C ++ / nativního kódu takhle (může mít překlepy):

Zde je příklad:

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

S tímto přístupem, lidé nemají učit příliš mnoho C ++ / CLI věci, vše skutečná zkouška bude provedena v jazyce C ++ nativní a třída TestShim bude použit na ‚publikovat‘ test na MSTest.exe (nebo aby byl viditelný ).

Pro přidání nové testy stačí deklarovat nový [TestMethod] void NewTest () {:: NewTest ();} způsob a novou void NewTest () nativní funkce. Žádná makra, žádné triky, straighforward.

Nyní je soubor Heade je volitelně, ale může být použita vystavit třídy Assert metody s C ++ nativní podpisy (např wchar_t * namísto Stirng ^), takže je možné si můžete udržovat ji v blízkosti C ++ a od C ++ / CLI :

Zde je příklad:

// 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

Odpovězeno 01/12/2009 v 22:56
zdroj uživatelem

hlasů
6

Osobně dávám přednost WinUnit protože mě nemá vyžadovat psát cokoliv kromě mých testů (I vybudovat DLL jako test, nikoliv exe). Jen jsem sestavení projektu, a poukazují WinUnit.exe mé testovací výstupní adresář a běží vše, co najde. Můžete si stáhnout projekt WinUnit zde . (MSDN nyní vyžaduje, abyste stáhli celou problematiku, nikoliv článek. WinUnit jsou zahrnuty do.)

Odpovězeno 15/09/2008 v 17:33
zdroj uživatelem

hlasů
4

Rámec je součástí VS9 je .NET, ale můžete psát testy v C ++ / CLI, tak dlouho, jak jste ochotni učit některé .NET ismů, měli byste být schopni testovat většinu jakýkoli C ++ kódu.

boost.test a googletest look být docela podobný, ale upraveny pro mírně odlišné účely. Oba tito mají binární komponenty, takže budete potřebovat další projekt v vaše řešení kompilovat a spouštět testy.

Rámec používáme je CxxTest , což je mnohem lehčí; je to pouze hlavičky a používá Perl (!) skript skřípání informace Test Suite z hlaviček (suites dědí z CxxTest :: základny, všechna jména vašich metody zkoušení začít s ‚testem‘). Je zřejmé, že to vyžaduje, aby se dostanete Perlu z jednoho zdroje nebo jiný , který přidává režie vašeho nastavení sestavení prostředí.

Odpovězeno 14/08/2008 v 15:17
zdroj uživatelem

hlasů
2

Nástroje, které zde byly zmíněny, jsou všechny nástroje příkazového řádku. Podíváte-li se pro více integrované řešení, se podívat na cfix studiu , což je Visual Studio AddIn pro C C ++ / testování jednotky. Je zcela podobné TestDriven.Net, ale pro (neřízený) C / C ++ .NET spíše než.