2008-09-21 13 views
11

Jestem zainteresowany słuchaniem o doświadczeniach z TDD i testowaniem jednostkowym dla C++ ogólnie z Visual Studio 2005 (Professional)Jak zintegrować podejście TDD z VisualStudio?

Najpierw trochę tła. Mamy dość duży projekt i wiele z nich zostało opracowanych na Linuksie przy użyciu CppUnit do testów jednostkowych. Projekt jest podzielony na kilka bibliotek, z których każda ma własny zestaw testów. Mam prosty skrypt, który kompiluje bibliotekę, kompiluje zestaw testów, a następnie uruchamia testy. Po wprowadzeniu zmian w kodzie po prostu uruchom "test" z wiersza poleceń i uruchom testy.

Teraz większość programistów używa Visual Studio 2005 na Windows do rozwoju tego produktu. Oczywiście nadal mogą uruchamiać testy z wiersza poleceń za pomocą nmake, ale wymaga to dodatkowych kroków i wolałbym mieć bardziej zintegrowane rozwiązanie.

Moje pytanie składa się z dwóch części.

Po pierwsze, jaki jest najlepszy sposób wytyczenia kodu do testów na dużej podstawie kodu? Czy normalne jest tworzenie kilku projektów testowych w rozwiązaniu, po jednym dla każdej biblioteki?

Po drugie, czy są jakieś narzędzia do integracji testów CppUnit w Visual Studio? Z zależnościami skonfigurowanymi w poprawny sposób projekt testowy powinien uruchomić testy, ale obecnie wyniki nadal pojawiają się w oknie poleceń.

Odpowiedz

1

Mój zespół korzysta obecnie z systemu, w którym mamy zautomatyzowaną kompilację nocną (która może być uruchamiana przez każdego z panelu budowy projektu), która zawiera "testowe" rozwiązanie VS2k5. Rozwiązanie testowe zawiera wszystkie projekty testów jednostkowych; jeden testowy projekt jednostkowy dla każdej "jednostki" kodu w głównym projekcie.

Po uruchomieniu zautomatyzowanej wersji buduje główne rozwiązanie, następnie rozwiązanie testowe, a na końcu uruchamia wszystkie pliki wykonywalne stworzone przez rozwiązanie testowe (skrypt Perla skleja to razem). Wyniki kompilacji, a także wykonanie testu (EXIT _ SUCCESS, EXIT _ FAILURE) są używane do aktualizacji pulpitu budowania projektu.

Ta sztuczka EXIT _ FAILURE może być również zastosowana do niestandardowego kroku kompilacji głównego projektu: jeśli jednostka testowa niestandardowego kroku kompilacji zwróci EXIT _ FAILURE, to kompilacja się nie powiedzie.

+0

Używamy również CruiseControl, więc wszystkie testy są uruchamiane po każdym zatwierdzeniu do systemu kontroli źródła. Jednak szukałem czegoś, co deweloperzy będą używać w ramach cyklu edycji testu, podczas gdy oni się rozwijają. –

2

Używam ramy testu wzmocnienia. Mam tendencję do dzielenia mojego kodu na pliki .lib i dla każdego z nich mam osobny projekt testowy EXE w trybie konsolowym. Kiedy projekt testowy jest zbudowany, wykorzystuje "etap budowy po", aby uruchomić się, a tym samym uruchomić testy. Każdy projekt testowy może być zależny od głównej aplikacji, więc za każdym razem, gdy jest budowany, wszystkie testy są uruchamiane jako pierwsze, ale może to być czasochłonne. Zamiast tego mam tendencję do ręcznego uruchamiania projektów testowych, ale mój zautomatyzowany system nocnej kompilacji uruchamia wszystkie projekty testowe w sposób oczywisty (piszę o tym i jeśli jakiekolwiek testy zakończą się niepowodzeniem, kompilacja się nie powiedzie i otrzymam powiadomienie e-mailem).

Więcej szczegółów here.

3

Jednym z projektów w moim towarzystwie robi dokładnie to. Używamy platformy testów jednostkowych o nazwie CXXTest (http://cxxtest.sourceforge.net/guide.html). Naprawdę podoba nam się ten framework dla C++, ponieważ wymaga on tylko napisania pliku nagłówkowego zawierającego testy jednostek. Pliki .CPP są tworzone przez skrypt (dostarczane są zarówno skrypty Python, jak i Perl).

Integrujemy się ze studiem wizualnym, udostępniając krok budowania postu, który buduje testy jednostkowe (jeśli wymagają one budowania), a następnie wykonuje je. Dane wyjściowe (pokazujące, co minęło i co nie powiodło się) są wyświetlane w oknie wyjściowym - nigdy nie musisz opuszczać IDE.

1

Można również użyć managed C++ do pisania testów jednostkowych w Visual Studio za pomocą testów jednostkowych ramy, który jest wbudowany w.

+0

Niestety, mamy wersję profesjonalną VS2005, a nie wersję drużynową, więc nie sądzę, że ma ona ramy testowe. Mamy również> 10 000 testów napisanych już w CppUnit. –

2
  • znajdę po hierarchii folderów użyteczne. Utwórz kod i testy jako podfoldery ProjectFolder. Utwórz 2 kody rozwiązania \ Project.sln i testy \ Tests.sln. Teraz dla każdej utworzonej biblioteki klas lub pliku wykonywalnego, np. Customers.dll ma odpowiednią bibliotekę testową. Zatem kod \ Customers \ Customers.csproj będzie mieć testy \ Customers \ TestCustomers.csproj, które odwołują się do poprzedniego.
  • Integracja CPPUnit w Visual Studio będzie na liniach wyboru właściwej aplikacji we Właściwościach projektu .. Ustawienia "Debugowanie". Myślę, że this page has what you need ma wykonanie testu z jednym naciśnięciem klawisza + raportowanie w IDE.
2

Oto co robię:

  • Utwórz projekt testowy wykonywalny, w głównym roztworze, który wykorzystuje źródło tylko z urządzenia, testy jednostki oraz ramach testu.
  • Spraw, aby biegacz testowy wygenerował plik tekstowy po pomyślnym uruchomieniu testów, aby studio graficzne mogło śledzić zależności.
  • Dodaj projekt, aby uruchomić swój biegacz testowy i wygenerować plik testowy. Oznacza to, że masz teraz dwa projekty na test.
  • Uczyń bieg próbny zależnością biblioteki, która zawiera jednostkę.

Osobiście nie sądzę, że ramy testowe (Google Test, Boost test, CppUnit itp.) Mają tak duże znaczenie. Większość z nich jest praktycznie równoważna funkcjonalnie.

Nie jestem w pełni zadowolony z liczby wygenerowanych projektów, ale uważam to za problem graficzny GUI programu Visual Studio, w tym sensie, że jest on całkiem użyteczny, aby takie projekty były włączone do takich celów, jak debugowanie.

Próbowałem użyć kroków budowania postu, aby uruchomić testy, ale niestety oznacza to, że kompilacja nie została przerwana po pierwszym niepowodzeniu.

+0

Dlaczego głosowanie w dół? –