Menggunakan CMake, bagaimana cara mendapatkan output verbose dari CTest?

109

Saya menggunakan CMake untuk membangun proyek saya. Saya telah menambahkan biner pengujian unit yang menggunakan kerangka kerja pengujian unit Boost. Biner yang satu ini berisi semua pengujian unit. Saya telah menambahkan biner itu untuk dijalankan oleh CTest:

ADD_EXECUTABLE( tftest test-main.cpp )
ENABLE_TESTING()
ADD_TEST( UnitTests tftest)

Tetapi output build di Visual Studio hanya memperlihatkan hasil dari menjalankan CTest:

      Start 1: UnitTests
  1/1 Test #1: UnitTests ................***Failed    0.05 sec

  0% tests passed, 1 tests failed out of 1

Ini tidak terlalu membantu, karena saya tidak bisa melihat tes mana yang gagal. Jika saya menjalankan ctest secara manual dari baris perintah dengan --verbosesaya mendapatkan output dari uji unit Boost yang memberi tahu apa yang sebenarnya gagal:

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

Jadi, apa yang perlu saya ubah di CMakeLists.txt agar CTest dapat dijalankan --verbosesetiap saat? Apakah ada cara yang lebih baik untuk menggunakan pengujian unit Boost dengan CMake / CTest?

Skrymsli
sumber

Jawaban:

92

Anda dapat menyetel variabel lingkungan CTEST_OUTPUT_ON_FAILURE, yang akan menampilkan keluaran apa pun dari program pengujian setiap kali pengujian gagal. Salah satu cara untuk melakukan ini saat menggunakan Makefiles dan baris perintah adalah sebagai berikut:

env CTEST_OUTPUT_ON_FAILURE=1 make check

Pertanyaan dan jawaban Stack Overflow ini menunjukkan cara mengatur variabel lingkungan di Visual Studio.

richq
sumber
3
Tidak berfungsi untuk saya (ctest versi 2.8.12.1). Saya mencoba SET(CTEST_OUTPUT_ON_FAILURE TRUE)dan SET(CTEST_OUTPUT_ON_FAILURE ON), tetapi tidak berpengaruh. Laporan lain di web menguatkan bahwa ini rusak.
Joachim W
4
@JoachimWuttke set(CTEST_OUTPUT_ON_FAILURE TRUE)tidak menyetel variabel lingkungan . Coba ini pada baris perintah: CTEST_OUTPUT_ON_FAILURE=TRUE make test.
thehouse
3
make CTEST_OUTPUT_ON_FAILURE=1 testIMO lebih pendek dan lebih bagus.
Timmmm
Pada file batch windows, cara menggunakan CTEST_OUTPUT_ON_FAILURE = 1 saat menelepon - msbuild /toolsversion:15.0 / p: Configuration = Release / p: Platform = x64 TESTS.vcxproj
Toral
34

Anda dapat menelepon ctestlangsung, setelah membuat dan membuat proyek Anda.

ctest --verbose
Jota Santos
sumber
29
  1. Anda dapat memeriksa Testing/Temporarysubfolder. Itu secara otomatis dibuat setelah menjalankan tes make. Folder ini berisi dua file: LastTest.logdan LastTestsFailed.log. LastTest.logberisi keluaran yang diinginkan untuk uji jalan. LastTestFailed.logberisi nama tes yang gagal. Jadi, Anda dapat memeriksanya secara manual setelah menjalankan make test.

  2. Cara kedua adalah mendapatkan ctest untuk menunjukkan konten file log setelah menjalankan pengujian:

    1. tempatkan di build dir (dari mana Anda menjalankan make test) file CTestCustom.ctest (Anda dapat melakukannya dengan perintah mengkonfigurasi file , misalnya) dengan konten berikut

      CTEST_CUSTOM_POST_TEST ("Cat Testing / Temporary / LastTest.log")

Alih-alih cat Anda dapat menggunakan perintah cmd Windows apa pun yang melakukan hal serupa.

  1. lari make testlagi dan dapatkan untung!

info tambahan tentang menyesuaikan ctest dapat Anda temukan di sini . Cukup langkah ke bagian "Menyesuaikan cmake". Semoga berhasil!

beduin
sumber
1
Oke terima kasih. Saya berharap akan ada cara untuk memodifikasi bendera yang dimasukkan ke dalam proyek / makefiles untuk ctest, tetapi saya tidak menemukan apa pun dan jawaban Anda sepertinya mengkonfirmasi itu. Info nama file sangat membantu!
Skrymsli
1
di suatu tempat di sekitar ctest 2.8.10 mereka telah rusak menggunakan perintah eksternal dengan argumen di CTEST_CUSTOM_POST_TEST lihat github.com/openscad/openscad/issues/260
jangan terang
@don: mungkin mereka tidak menjalankan cukup tes pada ctest ;-)
Joachim W
Masalah CMake dengan CTEST_CUSTOM_POST_TEST telah diperbaiki di 2.8.12.
Ela782
23

Saya harus menambahkan target "centang" sendiri. "membuat tes" tidak berarti apa-apa karena alasan tertentu. Jadi apa yang saya lakukan (seperti yang disarankan di suatu tempat di stackoverflow) - Saya menambahkan target ini secara manual. Untuk mendapatkan output verbose saya hanya menulisnya seperti:

add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} --verbose)
ony
sumber
21

Ada solusi yang sangat sederhana (yang karena alasan tertentu sulit ditemukan melalui Google Penelusuran):

ctest --output-on-failure

Jika Anda menggunakan CMake dengan fungsi folder terbuka Visual Studio, Anda dapat menambahkan file

"ctestCommandArgs": "--output-on-failure"

menyetel ke konfigurasi build Anda.

MikeMB
sumber
1
Saya sangat menyukai solusi Anda; itu tidak bertele-tele kecuali kegagalan.
AnthonyD973
19

make check CTEST_OUTPUT_ON_FAILURE=TRUE

zbyszek.dll
sumber
6
Semua suara negatif agak mengejutkan: ini hampir setara dengan jawaban yang diterima, tetapi lebih pendek dan lebih bagus. Juga bekerja dalam proyek yang saya uji.
zbyszek
2
buat CTEST_OUTPUT_ON_FAILURE = 1 tes
Alex Punnen
11

Ini membuat hasil pengujian lebih bertele-tele:

make test ARGS="-V"
Penghe Geng
sumber
10

Pendekatan saya adalah kombinasi dari jawaban dari ony , dari zbyszek , dan dari tarc . Saya menggunakan ${CMAKE_COMMAND}variabel (yang diatur ke jalur absolut ke eksekusi cmake yang dipanggil) dengan -E env CTEST_OUTPUT_ON_FAILURE=1argumen untuk memanggil perintah ctest yang sebenarnya menggunakan ${CMAKE_CTEST_COMMAND} -C $<CONFIG>. Untuk membantu menjelaskan apa yang sedang terjadi, saya mulai dengan tiga cmake -E echoperintah untuk menunjukkan direktori kerja saat ini dan perintah ctest untuk dipanggil. Inilah cara saya menelepon add_custom_target.

add_custom_target(check 
        ${CMAKE_COMMAND} -E echo CWD=${CMAKE_BINARY_DIR}
        COMMAND ${CMAKE_COMMAND} -E echo CMD=${CMAKE_CTEST_COMMAND} -C $<CONFIG>
        COMMAND ${CMAKE_COMMAND} -E echo ----------------------------------
        COMMAND ${CMAKE_COMMAND} -E env CTEST_OUTPUT_ON_FAILURE=1
            ${CMAKE_CTEST_COMMAND} -C $<CONFIG>
    WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
    DEPENDS ALL_BUILD
    )

Ini berfungsi dengan baik dengan MSVC IDE di mana kesalahan pengujian apa pun ditampilkan sebagai kesalahan kompilasi yang dapat diklik. Lihat cmake -E env untuk dokumentasi cmake -Emode alat baris perintah portabel. Saya juga menambahkan ketergantungan ALL_BUILDsehingga semua proyek akan dibangun sebelum meminta checktarget. (Di build Linux, mungkin perlu diganti ALL_BUILDdengan ALL; Saya belum menguji ini di Linux.)

Phil
sumber
6

Untuk orang yang menggunakan Visual Studio, berikut variasi lain (hack) pada tema:

cmake -E env CTEST_OUTPUT_ON_FAILURE=1 cmake --build . --target RUN_TESTS
Tarc
sumber
0

untuk menampilkan hasil dengan file XML Anda harus menjalankan tes dengan perintah berikut

~$ ctest -T Test

dan kami menemukan hasilnya di Testing / 1234123432 / test.xml dan file lain juga dibuat di Folder Pengujian

Amirouche Zeggagh
sumber
0

ctest -VV atau ctest --extra-verbose

Dari dokumentasi :

Aktifkan lebih banyak keluaran verbose dari pengujian.

Output tes biasanya disembunyikan dan hanya informasi ringkasan yang ditampilkan. Opsi ini akan menampilkan lebih banyak hasil tes.

Daniel Stracaboško
sumber