2013-02-05 8 views
26

Niedawno zacząłem próbować poddać testowi czcigodny i duży (> 1 milion linii) program. Obecnie nie ma testów jednostkowych. Ponadto program jest połączony, ponieważ każdy pojedynczy plik jest połączony ze sobą - nie ma żadnych bibliotek komponentów. Co więcej, obiekty są współzależne i trudno jest (niemożliwe?) Łączyć z dowolnymi plikami obiektowymi bez łączenia z co najmniej połową z nich.Czy mogę połączyć wiele testów jednostkowych BOOST w pojedynczy plik binarny testu?

Tak, wiem, moje życie jest do bani.

Chciałbym zrobić trochę refaktoryzacji (oczywiście), ale chciałbym mieć pewne testy, zanim zacznę się poruszać. Mój obecny pomysł polega na skompilowaniu jednego "programu testowego", który uruchamia wszystkie testy, które tworzę. To drastycznie uprościłoby łączące mnie problemy i pozwoliłoby mi skupić się na prawdziwych problemach. Więc mam dwa pytania:

  • Czy można połączyć wiele plików testowych jednostki BOOST w jeden plik wykonywalny testu?
  • Czy istnieje lepsze rozwiązanie?
+0

Wygląda na to, że może być sposób na zrobienie tego. Aktualizacje do naśladowania. – dbn

Odpowiedz

31

Zgaduję, to jest właśnie sposób użycia testu doładowania. chciałbym zachować jeden krótki plik main.cpp składający się dosłownie 2 linie:

#define BOOST_TEST_MODULE "C++ Unit Tests for MyTangledLibrary" 
#include <boost/test/included/unit_test.hpp> 

A potem chciałbym zachować dodając moduł testujący pliki * .cpp skompilowane w jeden plik wykonywalny

#include <boost/test/unit_test.hpp> 
<< your include files >> 

BOOST_AUTO_TEST_SUITE(FancyShmancyLogic) 

BOOST_AUTO_TEST_CASE(TestingIf2x3equals6) 
{ 
    ... 
} 

BOOST_AUTO_TEST_CASE(TestingIf2x2equals4) 
{ 
    ... 
} 

BOOST_AUTO_TEST_SUITE_END() 

Tak, będzie w stanie skompilować ten main.cpp i wszystkie twoje moduły do ​​jednego dużego pliku wykonywalnego.

+1

Kiedy próbuję tego, test kompiluje i łączy, ale po wykonaniu otrzymuję: Błąd konfiguracji testowej: drzewo testowe jest puste –

+2

Musisz również dołączyć wszystkie pliki modułu * .cpp do main.cpp. W przeciwnym razie biegacz testowy nie wie o twoich testach. – Ace7k3

+1

@ Ace7k3, Myślałem, że to była zła praktyka, aby kiedykolwiek '# dołączyć' plik' .cpp'. Czy to wyjątek? – tjwrona1992