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?


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.


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

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!


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)

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.


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

19

make check CTEST_OUTPUT_ON_FAILURE=TRUE


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"

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.)


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

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


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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.