Construiți și testați proiectul cu ajutorul modelului cmake și ctest, dezvoltarea sistemului

Cred că majoritatea dezvoltatorilor C ++ au întâlnit într-un fel CMake, în același timp că un astfel de CTest și cum poate automatiza testul de model nu este totul.






Pentru a arăta modul în care puteți utiliza CMake și CTest împreună, eu, ca un exemplu a creat un pic de bibliotecă, constând dintr-o pereche de linii de cod care este capabil de a adăuga și diviza Pe lângă aplicațiile CMake și CTest au nevoie de orice bibliotecă UnitTest (în acest exemplu am a luat Boost.Test, deși, puteți lua și GoogleTest). Aici este necesar să se acorde o atenție la ceea ce nu este cadru CTest pentru testele reale de scriere. CTest - este o aplicație pentru a rula teste și, dacă este necesar, trimite rezultatele în oricare dintre depozitele acceptate.
Structura directoarelor cu aplicația de testare va fi următoarea:


./ test
./test/main.cpp
./test/CMakeLists.txt
./ include
./include/calc.h
./ src
./src/CMakeLists.txt
./src/calc.cpp
./CMakeLists.txt

Deci, creați un rădăcină CMakeLists și un fișier CMakeLists pentru a descrie asamblarea bibliotecii în sine și a testelor.

cmake_minimum_required (VERSIUNEA 2.6)
proiect (AutoUnitTests)

SET (CMAKE_LIBRARY_OUTPUT_DIRECTORY
$ / bin
CACHE PATH
"Director unic pentru toți"
)

SET (CMAKE_RUNTIME_OUTPUT_DIRECTORY
$ / bin
CACHE PATH
"Director unic pentru toți"
)

SET (CMAKE_ARCHIVE_OUTPUT_DIRECTORY
$ / lib
CACHE PATH
"Director unic pentru toți"






)

find_package (Boost Necesar)

add_subdirectory (src build / src)
add_subdirectory (test build / test)

Primele trei comenzi SET sunt opționale, dar nu-mi place când o mulțime de fișiere intermediare sunt puse în directorul rădăcină în timpul procesului de construire. Dar prezența comenzii enable_testing în fișierul rădăcină CMakeLists pe rândul său este obligatorie, dacă este transferată în CMakeLists din directorul test, nu va funcționa.
Următorul pas este să creați fișierul CMakeLists în directorul src, pentru a fi sincer, nu reprezintă cel mai mic interes:

proiect (Calc)
set (Calc_source calc.cpp)
add_library (calc $ STATIC $)

Și ultimul fișier, în directorul de testare:

find_package (Boost COMPONENTS unit_test_framework REQUIRED)

set (test1_source main.cpp)
add_executable (test1 $)
target_link_libraries (test1 $ calc)

add_test (NAME Test1 COMMAND test1)

Singura diferență față de fișierul uzual CMakeLists este comanda add_test. în care se transferă numele testului și ce comandă este necesară pentru ao executa. Ie această comandă ar putea arăta astfel:

add_test (testTkInter "/ usr / bin / python" "-c" "import Tkinter")

Acum, puteți executa testele de execuție cu comanda de testare a mărcii și rezultatul va arăta astfel:

Efectuarea testelor.
Proiect de testare / home / astavonin / Projects / AutoUnitTest
Start 1: Test1
1/1 Testul # 1: Test1. A trecut 0.03 sec

Au trecut 100% teste, 0 teste au eșuat din 1

Timp total de încercare (real) = 0,56 sec

Dacă adăugați un alt test care ar eșua, rezultatele vor fi puțin diferite:

Efectuarea testelor.
Proiect de testare / home / astavonin / Projects / AutoUnitTest
Start 1: Test1
Test 1/2: Test1. A trecut 0.0 secunde
Start 2: Test2
Testul 2/2: Test2. *** A eșuat 0,00 secunde

Au trecut 50% teste, 1 teste au eșuat din 2

Timp total de testare (real) = 0,46 sec

Următoarele teste S-au defectat:
2 - Test2 (eșuat)
Erori în timpul funcționării CTest

Consola de ieșire a aplicațiilor de testare va fi salvată în directorul ./Testing/Temporary.
Un exemplu poate fi descărcat complet aici.

Note asemănătoare:







Trimiteți-le prietenilor: