Mam problem ze zrozumieniem, jak skonfigurować środowisko testowe i używać go w programie Visual Studio 2008 dlaC++
przypuszczalnie z pakietem wbudowany w jednostkę badającą.
Wszelkie linki lub samouczki będą mile widziane.
Mam problem ze zrozumieniem, jak skonfigurować środowisko testowe i używać go w programie Visual Studio 2008 dlaC++
przypuszczalnie z pakietem wbudowany w jednostkę badającą.
Wszelkie linki lub samouczki będą mile widziane.
Odpowiedzi:
Ta strona może pomóc, zawiera przegląd wielu frameworków testów jednostkowych C ++:
Sprawdź CPPUnitLite lub CPPUnitLite2 .
CPPUnitLite został stworzony przez Michaela Feathersa, który pierwotnie przeportował JUnit Javy do C ++ jako CPPUnit (CPPUnit próbuje naśladować model rozwojowy JUnit - ale C ++ nie posiada funkcji Javy [np. Refleksji], aby ułatwić korzystanie z niego).
CPPUnitLite próbuje stworzyć prawdziwy framework testowy w stylu C ++, a nie Java przeniesiony do C ++. (Parafrazuję z książki Feather's Working Effective with Legacy Code ). CPPUnitLite2 wydaje się być kolejnym przepisaniem, z większą liczbą funkcji i poprawek błędów.
Właśnie natknąłem się też na UnitTest ++ który zawiera rzeczy z CPPUnitLite2 i kilka innych frameworków.
Firma Microsoft wydała WinUnit .
Istnieje sposób na przetestowanie niezarządzanego języka C ++ przy użyciu wbudowanej platformy testowej w programie Visual Studio 2008 . Jeśli utworzysz projekt testowy w języku C ++ przy użyciu języka C ++ / CLI, możesz następnie wykonywać wywołania niezarządzanej biblioteki DLL. Będziesz musiał przełączyć obsługę środowiska uruchomieniowego języka wspólnego na / clr z / clr: safe, jeśli chcesz przetestować kod, który został napisany w niezarządzanym C ++.
Mam tutaj szczegóły krok po kroku na moim blogu: http://msujaws.wordpress.com/2009/05/06/unit-testing-mfc-with-mstest/
Oto podejście, którego używam do testowania modułu ponownego zapisywania adresów URL w usługach IIS w firmie Microsoft (jest oparty na wierszu polecenia, ale powinien działać również w przypadku VS):
Oto przykład:
// 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();
}
};
Dzięki takiemu podejściu ludzie nie muszą uczyć się zbyt wiele C ++ / CLI, cały prawdziwy test zostanie wykonany w natywnym języku C ++, a klasa TestShim zostanie użyta do 'opublikowania' testu w MSTest.exe (lub uczynienia go widocznym ).
Aby dodać nowe testy, wystarczy zadeklarować nową metodę [TestMethod] void NewTest () {:: NewTest ();} i nową natywną funkcję void NewTest (). Żadnych makr, żadnych sztuczek, prosto do przodu.
Teraz plik heade jest opcjonalny, ale można go użyć do ujawnienia metod klasy Assert z natywnymi sygnaturami C ++ (np. Wchar_t * zamiast Stirng ^), więc można go trzymać blisko C ++ i daleko od C ++ / CLI :
Oto przykład:
// 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
Osobiście wolę WinUnit, ponieważ nie wymaga on ode mnie pisania niczego poza testami (buduję .dll jako test, a nie exe). Po prostu buduję projekt i wskazuję WinUnit.exe na mój testowy katalog wyjściowy i uruchamia wszystko, co znajdzie. Możesz pobrać projekt WinUnit tutaj . (MSDN wymaga teraz pobrania całego wydania, a nie artykułu. WinUnit jest zawarty w pakiecie).
Framework dołączony do VS9 to .NET, ale możesz pisać testy w C ++ / CLI, więc jeśli dobrze nauczysz się niektórych izmów .NET, powinieneś być w stanie przetestować prawie każdy kod C ++.
boost.test i googletest wyglądają na dość podobne, ale dostosowane do nieco innych zastosowań. Oba mają składnik binarny, więc będziesz potrzebować dodatkowego projektu w swoim rozwiązaniu, aby skompilować i uruchomić testy.
Frameworkiem, którego używamy, jest CxxTest , który jest znacznie lżejszy; zawiera tylko nagłówki i używa skryptu Perl (!) do pobierania informacji o zestawie testów z nagłówków (zestawy dziedziczą po CxxTest :: Base, wszystkie nazwy metod testowych zaczynają się od „test”). Oczywiście wymaga to pobrania Perla z jednego lub drugiego źródła , co zwiększa nakład pracy przy konfiguracji środowiska kompilacji.
Używam UnitTest ++ .
Przez lata, odkąd napisałem ten post, źródło przeniosło się z SourceForge na github. Również przykładowy samouczek jest teraz bardziej agnostyczny - w ogóle nie wchodzi w konfigurację ani projekt.
Wątpię, aby nadal działał w Visual Studio 6, ponieważ pliki projektu są teraz tworzone przez CMake. Jeśli nadal potrzebujesz obsługi starszej wersji, możesz pobrać ostatnią dostępną wersję w gałęzi SourceForge .
Wszystkie wymienione tutaj narzędzia to narzędzia wiersza poleceń. Jeśli szukasz bardziej zintegrowanego rozwiązania, spójrz na cfix studio , które jest dodatkiem Visual Studio do testów jednostkowych C / C ++. Jest dość podobny do TestDriven.Net, ale dla (niezarządzanego) C / C ++ zamiast .NET.
Nie jestem w 100% pewien co do VS2008, ale wiem, że framework do testów jednostkowych, który Microsoft dostarczył w VS2005 jako część ich pakietu Team Suite, był przeznaczony tylko dla .NET, a nie C ++
Użyłem również CppUnit i było w porządku. Tak samo jak NUnit / JUnit / tak dalej.
Jeśli korzystałeś z boost, mają one również bibliotekę testów jednostkowych
Faceci stojący za boostem mają poważne kotlety kodowania, więc powiedziałbym, że ich framework powinien być całkiem niezły, ale może nie być najbardziej przyjazny dla użytkownika :-)
Tester jednostkowy dla Visual Studio 2008 jest przeznaczony tylko dla kodu .NET, o ile wiem.
Użyłem CppUnit w Visual Studio 2005 i stwierdziłem, że jest całkiem niezły.
O ile pamiętam, konfiguracja była stosunkowo bezbolesna. Po prostu upewnij się, że w twoich projektach testowych linker (Linker → Input → Additional Dependencies) zawiera cppunitd.lib.
Następnie #include <cppunit/extensions/HelperMacros.h>
w swoim nagłówku.
Następnie możesz wykonać czynności opisane w http://cppunit.sourceforge.net/doc/1.11.6/cppunit_cookbook.html, aby uruchomić klasę testową.
Cierpiałem z powodu implementacji testów jednostkowych dla niezarządzanej aplikacji C ++ w środowisku Windows z Visual Studio. Więc udało mi się przezwyciężyć i napisałem post jako przewodnik krok po kroku do niezarządzanego testowania jednostkowego aplikacji w C ++. Mam nadzieję, że może ci to pomóc.
Test jednostkowy niezarządzanego języka C ++ w programie Visual Studio