2010-06-03 17 views
6

Do tej pory nie korzystałem z testów jednostek i zamierzam przyjąć tę procedurę. Byłem pod wrażeniem TDD i na pewno chcę spróbować - jestem prawie pewien, że to jest droga.Jaka jest twoja ulubiona/zalecana struktura projektu i struktura plików do testowania jednostek za pomocą funkcji Boost?

Wzmocnienie wygląda na dobry wybór, głównie dlatego, że jest utrzymywany. W związku z tym, w jaki sposób powinienem wdrożyć funkcjonalną i elegancką strukturę plików i strukturę projektu? Używam VS 2005 w Win XP. Badałem go i byłem bardziej zdezorientowany niż oświecony.

Odpowiedz

2

Nasz doładowania opiera struktura Testowanie wygląda następująco:

ProjectRoot/ 
    Library1/ 
    lib1.vcproj 
    lib1.cpp 
    classX.cpp 
    ... 
    Library2/ 
    lib2.vcproj 
    lib2.cpp 
    toolB.cpp 
    classY.cpp 
    ... 
    MainExecutable/ 
    main.cpp 
    toolA.cpp 
    toolB.cpp 
    classZ.cpp 
    ... 
    Tests/ 
    unittests.sln 
    ut_lib1/ 
     ut_lib1.vcproj (referencing the lib1 project) 
     ut_lib1.cpp (with BOOST_AUTO_TEST_CASE) - testing public interface of lib1 
     ut_classX.cpp - testing of a class or other entity might be split 
         into a separate test file for size reasons or if the entity 
         is not part of the public interface of the library 
     ... 
    ut_lib2/ 
     ut_lib2.vcproj (referencing the lib2 project) 
     ut_lib2.cpp (with BOOST_AUTO_TEST_CASE) - testing public interface of lib2 
     ... 
    ut_toolA/ 
     ut_toolA.vcproj (referencing the toolA.cpp file) 
     ut_toolA.cpp - testing functions of toolA 
    ut_toolB/ 
     ut_toolB.vcproj (referencing the toolB.cpp file) 
     ut_toolB.cpp - testing functions of toolB 
    ut_main/ 
     ut_main.vcproj (referencing all required cpp files from the main project) 
     ut_classZ.cpp - testing classZ 
     ... 

Struktura ta została wybrana do projektu Legacy, gdzie mieliśmy zdecydować, na zasadzie case-by-case na co testuje dodać i jak grupowe projekty testowe dla istniejących modułów kodu źródłowego.

warte Uwaga:

  • Jednostka Kod Testowanie jest zawsze zestawiane oddzielnie od kodu produkcyjnego.
  • Projekty produkcyjne nie odwołują się do kodu testu jednostkowego.
  • Projekty testowania jednostek obejmują pliki źródłowe bezpośrednio lub tylko biblioteki odniesień, w zależności od tego, co ma sens z uwagi na użycie określonego pliku kodu.
  • Uruchamianie testów jednostkowych odbywa się za każdym razem po kroku kompilacji _ *. Vcproj
  • Wszystkie nasze konstrukcje produkcyjne automatycznie przeprowadzają również testy jednostkowe. (W naszych skryptach kompilacji).

W naszym prawdziwym (C++) świecie musisz dokonać kompromisów. problemy ze starszymi wersjami, wygoda dla programistów, czasy kompilacji itp. Uważam, że nasza struktura projektu jest dobrym kompromisem. :-)

0

Wylałem mój kod źródłowy do pliku .libs lub .dlls, a następnie moje projekty testowe Boost zależą od tych projektów lib/dll. Więc mogę skończyć z:

ProjectRoot 
    Lib1Source 
    Lib1Tests 
    Lib2Source 
    Lib2Tests 

Alternatywą jest przechowywanie źródło w osobnym folderze i dodać pliki zarówno do głównego projektu aplikacji i projektu badanej jednostki, ale uważam to trochę niechlujny. YMMV.

+2

Alternatywa jest bardzo podatna na błędy! – Wartin

+0

Co z zależnościami ProjectRoot? Czy ProjectRoot ma ProjectRootTests, który zależy od wszystkich innych testów? – JBRWilkinson