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 .
Sprawdź także Catch lub Doctest
źródło
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/
źródło
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
źródło
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).
źródło
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.
źródło
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 .
źródło
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.
źródło
Użyłem CppUnit z VS2005 i Eclipse. Wiki jest bardzo dokładna (zwłaszcza jeśli znasz JUnit).
źródło
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 :-)
źródło
Z tych samych powodów lubię CxxTest. Jest to tylko plik nagłówkowy, więc nie jest wymagane łączenie. Nie utknąłeś z Perlem, ponieważ istnieje również Python runner. Wkrótce przejrzę bibliotekę Google. Rzeczy doładowania wciągają zbyt dużo innego bagażu.
źródło
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ą.
źródło
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
źródło