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 --verbose
saya 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 --verbose
setiap saat? Apakah ada cara yang lebih baik untuk menggunakan pengujian unit Boost dengan CMake / CTest?
Jawaban:
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:Pertanyaan dan jawaban Stack Overflow ini menunjukkan cara mengatur variabel lingkungan di Visual Studio.
sumber
SET(CTEST_OUTPUT_ON_FAILURE TRUE)
danSET(CTEST_OUTPUT_ON_FAILURE ON)
, tetapi tidak berpengaruh. Laporan lain di web menguatkan bahwa ini rusak.set(CTEST_OUTPUT_ON_FAILURE TRUE)
tidak menyetel variabel lingkungan . Coba ini pada baris perintah:CTEST_OUTPUT_ON_FAILURE=TRUE make test
.make CTEST_OUTPUT_ON_FAILURE=1 test
IMO lebih pendek dan lebih bagus.Anda dapat menelepon
ctest
langsung, setelah membuat dan membuat proyek Anda.sumber
Anda dapat memeriksa
Testing/Temporary
subfolder. Itu secara otomatis dibuat setelah menjalankan tes make. Folder ini berisi dua file:LastTest.log
danLastTestsFailed.log
.LastTest.log
berisi keluaran yang diinginkan untuk uji jalan.LastTestFailed.log
berisi nama tes yang gagal. Jadi, Anda dapat memeriksanya secara manual setelah menjalankanmake test
.Cara kedua adalah mendapatkan ctest untuk menunjukkan konten file log setelah menjalankan pengujian:
tempatkan di build dir (dari mana Anda menjalankan
make test
) file CTestCustom.ctest (Anda dapat melakukannya dengan perintah mengkonfigurasi file , misalnya) dengan konten berikutCTEST_CUSTOM_POST_TEST ("Cat Testing / Temporary / LastTest.log")
Alih-alih cat Anda dapat menggunakan perintah cmd Windows apa pun yang melakukan hal serupa.
make test
lagi dan dapatkan untung!info tambahan tentang menyesuaikan ctest dapat Anda temukan di sini . Cukup langkah ke bagian "Menyesuaikan cmake". Semoga berhasil!
sumber
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:
sumber
Ada solusi yang sangat sederhana (yang karena alasan tertentu sulit ditemukan melalui Google Penelusuran):
Jika Anda menggunakan CMake dengan fungsi folder terbuka Visual Studio, Anda dapat menambahkan file
menyetel ke konfigurasi build Anda.
sumber
make check CTEST_OUTPUT_ON_FAILURE=TRUE
sumber
Ini membuat hasil pengujian lebih bertele-tele:
sumber
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=1
argumen untuk memanggil perintah ctest yang sebenarnya menggunakan${CMAKE_CTEST_COMMAND} -C $<CONFIG>
. Untuk membantu menjelaskan apa yang sedang terjadi, saya mulai dengan tigacmake -E echo
perintah untuk menunjukkan direktori kerja saat ini dan perintah ctest untuk dipanggil. Inilah cara saya meneleponadd_custom_target
.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 -E
mode alat baris perintah portabel. Saya juga menambahkan ketergantunganALL_BUILD
sehingga semua proyek akan dibangun sebelum memintacheck
target. (Di build Linux, mungkin perlu digantiALL_BUILD
denganALL
; Saya belum menguji ini di Linux.)sumber
Untuk orang yang menggunakan Visual Studio, berikut variasi lain (hack) pada tema:
sumber
untuk menampilkan hasil dengan file XML Anda harus menjalankan tes dengan perintah berikut
dan kami menemukan hasilnya di Testing / 1234123432 / test.xml dan file lain juga dibuat di Folder Pengujian
sumber
ctest -VV
atauctest --extra-verbose
Dari dokumentasi :
sumber