Używam CMake do tworzenia mojego projektu. Dodałem plik binarny testu jednostkowego, który korzysta z platformy testów jednostkowych Boost. Ten plik binarny zawiera wszystkie testy jednostkowe. Dodałem ten plik binarny do uruchomienia przez CTest:
ADD_EXECUTABLE( tftest test-main.cpp )
ENABLE_TESTING()
ADD_TEST( UnitTests tftest)
Ale dane wyjściowe kompilacji w programie Visual Studio pokazują tylko wynik działania CTest:
Start 1: UnitTests
1/1 Test #1: UnitTests ................***Failed 0.05 sec
0% tests passed, 1 tests failed out of 1
Nie jest to zbyt pomocne, ponieważ nie widzę, który test się nie powiódł. Jeśli uruchomię ctest ręcznie z wiersza poleceń --verbose
, otrzymam dane wyjściowe z testu jednostkowego Boost, który mówi, co tak naprawdę się nie powiodło:
1: Test command: tftest.exe
1: Test timeout computed to be: 9.99988e+006
1: Running 4 test cases...
1: test-main.cpp(20): error in "sanity_check3": check 1 == 2 failed
1:
1: *** 1 failure detected in test suite "Master Test Suite"
1/1 Test #1: UnitTests ................***Failed 0.00 sec
Więc co muszę zmienić w CMakeLists.txt, aby CTest działał przez --verbose
cały czas? Czy istnieje lepszy sposób używania testów jednostkowych Boost z CMake / CTest?
Odpowiedzi:
Możesz ustawić zmienną środowiskową
CTEST_OUTPUT_ON_FAILURE
, która będzie pokazywać wszelkie dane wyjściowe programu testowego, gdy test zakończy się niepowodzeniem. Jednym ze sposobów, aby to zrobić, używając Makefiles i wiersza poleceń, byłby następujący:To pytanie i odpowiedź dotyczące przepełnienia stosu pokazują, jak ustawić zmienne środowiskowe w programie Visual Studio.
źródło
SET(CTEST_OUTPUT_ON_FAILURE TRUE)
iSET(CTEST_OUTPUT_ON_FAILURE ON)
, ale to nie daje efektu. Inne raporty w sieci potwierdzają, że jest to zepsute.set(CTEST_OUTPUT_ON_FAILURE TRUE)
nie ustawia zmiennej środowiskowej . Spróbuj to w wierszu poleceń:CTEST_OUTPUT_ON_FAILURE=TRUE make test
.make CTEST_OUTPUT_ON_FAILURE=1 test
jest krótsza i ładniejsza IMO.Można było zadzwonić
ctest
bezpośrednio, po obejrzeniu i wykonaniu projektu.źródło
Możesz sprawdzić
Testing/Temporary
podfolder. Jest tworzony automatycznie po uruchomieniu make test. Ten folder zawiera dwa pliki:LastTest.log
iLastTestsFailed.log
.LastTest.log
zawiera żądane dane wyjściowe do uruchomienia testów.LastTestFailed.log
zawiera nazwy testów zakończonych niepowodzeniem. Możesz więc sprawdzić je ręcznie po wykonaniumake test
.Drugim sposobem jest pobranie ctest, aby pokazać zawartość plików dziennika po uruchomieniu testów:
umieść w katalogu budowania (z którego uruchamiasz
make test
) plik CTestCustom.ctest (możesz to zrobić np. poleceniem configure file ) z następującą zawartościąCTEST_CUSTOM_POST_TEST ("testy kota / tymczasowe / LastTest.log")
Zamiast cat możesz użyć dowolnego polecenia cmd systemu Windows, które robi podobne rzeczy.
make test
ponownie i zyskaj!dodatkowe informacje na temat dostosowywania ctest można znaleźć tutaj . Wystarczy przejść do sekcji „Dostosowywanie cmake”. Powodzenia!
źródło
Musiałem sam dodać cel „sprawdź”. „rób testy” z jakiegoś powodu nic nie robi. Więc co zrobiłem (jak sugerowałem gdzieś na stackoverflow) - dodałem ten cel ręcznie. Aby uzyskać szczegółowe dane wyjściowe, napisałem to tak:
źródło
Jest bardzo proste rozwiązanie (które z jakiegoś powodu trudno znaleźć w wyszukiwarce Google):
Jeśli używasz CMake z funkcją Otwórz folder programu Visual Studio, możesz dodać
ustawienie do konfiguracji kompilacji.
źródło
make check CTEST_OUTPUT_ON_FAILURE=TRUE
źródło
To sprawia, że wynik testu jest bardziej szczegółowy:
źródło
Moje podejście jest kombinacją odpowiedzi z Ony , od Zbyszka , a od TARC . Używam
${CMAKE_COMMAND}
zmiennej (która jest ustawiona na ścieżkę bezwzględną do wywoływanego pliku wykonywalnego cmake) z-E env CTEST_OUTPUT_ON_FAILURE=1
argumentem do wywołania rzeczywistego polecenia ctest przy użyciu${CMAKE_CTEST_COMMAND} -C $<CONFIG>
. Aby pomóc wyjaśnić, co się dzieje, zacznę od trzechcmake -E echo
poleceń, aby pokazać bieżący katalog roboczy i polecenie ctest, które ma zostać wywołane. Oto jak nazywamadd_custom_target
.Działa to dobrze w MSVC IDE, gdzie wszelkie błędy testowe są wyświetlane jako klikalne błędy kompilacji. Zobacz cmake -E env, aby uzyskać dokumentację
cmake -E
trybu przenośnego narzędzia wiersza poleceń. Dodaję również zależność odALL_BUILD
, aby wszystkie projekty zostały zbudowane przed wywołaniem elementucheck
docelowego. (Na Linux buduje, może trzeba wymienić jedenALL_BUILD
zALL
;. Nie testowałem tego jeszcze w systemie Linux)źródło
Dla osób korzystających z Visual Studio, oto kolejna odmiana (hack) na temat:
źródło
aby pokazać wynik w pliku XML, musisz wykonać test za pomocą następującego polecenia
i znaleźliśmy wynik w Testing / 1234123432 / test.xml, a inne pliki są również generowane w folderze Testing
źródło
ctest -VV
lubctest --extra-verbose
Z dokumentacji :
źródło