CMake का उपयोग करते हुए, मैं सीटीस्ट से वर्बोज़ आउटपुट कैसे प्राप्त करूं?


109

मैं अपनी परियोजना के निर्माण के लिए CMake का उपयोग कर रहा हूँ। मैंने एक यूनिट टेस्ट बाइनरी जोड़ा है जो बूस्ट यूनिट टेस्टिंग फ्रेमवर्क का उपयोग कर रहा है। इस एक बाइनरी में सभी यूनिट परीक्षण शामिल हैं। मैंने जोड़ा है कि बाइनरी को क्रेस्ट द्वारा चलाया जाएगा:

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

लेकिन Visual Studio में निर्मित आउटपुट केवल CTest चलाने का परिणाम दिखाता है:

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

  0% tests passed, 1 tests failed out of 1

यह बहुत मददगार नहीं है, क्योंकि मैं यह नहीं देख सकता कि कौन सा टेस्ट फेल हुआ। यदि मैं कमांड लाइन से मैन्युअल रूप से ctest चलाता हूं, तो मुझे --verboseबूस्ट यूनिट टेस्ट से आउटपुट मिलता है जो बताता है कि वास्तव में क्या विफल रहा है:

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

तो, मुझे सीटेककेस्ट में बदलने की क्या जरूरत है --verbose। हर समय सीरेस्ट चलाने के लिए । क्या सीएमके / सीटीस्ट के साथ बूस्ट यूनिट परीक्षणों का उपयोग करने का एक बेहतर तरीका है?


जवाबों:


92

आप पर्यावरण चर सेट कर सकते हैं CTEST_OUTPUT_ON_FAILURE, जो परीक्षण विफल होने पर आपको परीक्षण कार्यक्रम से कोई भी आउटपुट दिखाएगा। Makefiles और कमांड लाइन का उपयोग करते समय ऐसा करने का एक तरीका इस प्रकार होगा:

env CTEST_OUTPUT_ON_FAILURE=1 make check

यह स्टैक ओवरफ्लो प्रश्न और उत्तर दिखाता है कि विज़ुअल स्टूडियो में पर्यावरण चर कैसे सेट करें।


3
मेरे लिए काम नहीं करता है (ctest संस्करण 2.8.12.1)। मैंने कोशिश की SET(CTEST_OUTPUT_ON_FAILURE TRUE)और SET(CTEST_OUTPUT_ON_FAILURE ON), लेकिन इसका कोई असर नहीं हुआ। वेब में अन्य रिपोर्ट यह पुष्टि करती है कि यह टूट गया है।
जोकिम डब्ल्यू।

4
@JoachimWuttke set(CTEST_OUTPUT_ON_FAILURE TRUE)एक पर्यावरण चर सेट नहीं करता है । कमांड लाइन पर यह कोशिश करें CTEST_OUTPUT_ON_FAILURE=TRUE make test:।
thehouse

3
make CTEST_OUTPUT_ON_FAILURE=1 testछोटा और अच्छा है IMO।
टिम्मम्म

विंडोज़ बैच फ़ाइल पर, कॉल करते समय CTEST_OUTPUT_ON_FAILURE = 1 का उपयोग कैसे करें - msbuild /toolsversion: 15.0 / p: कॉन्फ़िगरेशन = रिलीज़ / पी: प्लेटफ़ॉर्म = x64 TESTS.vcxproj
Toral

34

ctestसेमीकिंग और अपनी परियोजना बनाने के बाद आप सीधे कॉल कर सकते हैं।

ctest --verbose

29
  1. आप Testing/Temporaryसबफ़ोल्डर की जाँच कर सकते हैं । यह मेक टेस्ट चलाने के बाद अपने आप बन जाता है। इस फ़ोल्डर में दो फ़ाइलें हैं: LastTest.logऔर LastTestsFailed.logLastTest.logरन परीक्षण के लिए वांछित आउटपुट शामिल हैं। LastTestFailed.logविफल परीक्षणों के नाम हैं। इसलिए आप उन्हें निष्पादित करने के बाद मैन्युअल रूप से जांच कर सकते हैं make test

  2. दूसरा तरीका यह है कि आपको परीक्षण चलाने के बाद लॉग फाइल की सामग्री दिखाने के लिए ctest प्राप्त करना है:

    1. में जगह बनाने के dir (जिसमें से आप चलाने make test) फ़ाइल CTestCustom.ctest (आप के साथ यह कर सकते हैं कॉन्फ़िगर फ़ाइल के साथ, कमांड उदाहरण के लिए) निम्नलिखित सामग्री

      CTEST_CUSTOM_POST_TEST ("कैट परीक्षण / अस्थायी / LastTest.log")

बिल्ली के बजाय आप जो भी विंडोज cmd कमांड का उपयोग कर सकते हैं वह इसी तरह की चीजें करता है।

  1. make testफिर से दौड़ें और लाभ प्राप्त करें!

ctest को कस्टमाइज़ करने के बारे में अतिरिक्त जानकारी आप यहाँ पा सकते हैं । बस "कस्टमाइज़िंग सेमीके" सेक्शन पर जाएँ। सौभाग्य!


1
ठीक है शुक्रिया। मैं उम्मीद कर रहा था कि ctest के लिए प्रोजेक्ट / मेकफाइल्स में डाले गए झंडे को संशोधित करने का एक तरीका होगा, लेकिन मुझे कुछ भी नहीं मिला और आपका जवाब इस बात की पुष्टि करता है। फ़ाइल का नाम जानकारी उपयोगी है!
स्क्रीम्सली

1
ctest के आसपास कहीं भी 2.8.10 वे CTEST_CUSTOM_POST_TEST में तर्कों के साथ बाहरी आदेशों का उपयोग करके टूट चुके हैं, देखें github.com/openscad/openscad/issues/260
उज्ज्वल

@don: शायद वे ctest पर पर्याप्त परीक्षण नहीं चला रहे हैं ;-)
जोचिम डब्ल्यू

CTEST_CUSTOM_POST_TEST के साथ CMake मुद्दा 2.8.12 में तय किया गया है।
इला El El२

23

मुझे अपने आप से "जांच" लक्ष्य जोड़ना था। "परीक्षण करना" किसी कारण से कुछ नहीं करता है। तो मैंने क्या किया (जैसा कि स्टैकओवरफ्लो पर कहीं सुझाव दिया गया था) - मैंने इस लक्ष्य को मैन्युअल रूप से जोड़ा। वर्बोज़ आउटपुट प्राप्त करने के लिए मैंने इसे इस तरह लिखा है:

add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} --verbose)

21

एक बहुत ही सरल उपाय है (जो किसी कारण से Google खोज के माध्यम से खोजना मुश्किल है):

ctest --output-on-failure

यदि आप Visual Studio के ओपन फोल्डर फ़ंक्शन के साथ CMake का उपयोग करते हैं, तो आप इसे जोड़ सकते हैं

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

आपके बिल्ड कॉन्फ़िगरेशन के लिए सेटिंग।


1
मुझे तुम्हारा हल बहुत पसंद है; यह विफलता पर छोड़कर क्रिया नहीं है।
एन्थोनीडी 973

19

make check CTEST_OUTPUT_ON_FAILURE=TRUE


6
सभी डाउन-वोट बल्कि आश्चर्यजनक हैं: यह स्वीकृत उत्तर के लगभग बराबर है, लेकिन कम और अच्छे हैं। मेरे द्वारा परीक्षण की गई परियोजना में भी काम करता है।
zbyszek

2
CTEST_OUTPUT_ON_FAILURE = 1 परीक्षण करें
एलेक्स पुन्नन


10

मेरे दृष्टिकोण जवाब का एक संयोजन है ony से , Zbyszek से , और TARC से । मैं ${CMAKE_COMMAND}चर का उपयोग करता हूं (जो कि लागू सीमेक निष्पादन योग्य के लिए पूर्ण पथ पर सेट है) -E env CTEST_OUTPUT_ON_FAILURE=1का उपयोग करके वास्तविक ctest कमांड को लागू करने के तर्क के साथ ${CMAKE_CTEST_COMMAND} -C $<CONFIG>। यह स्पष्ट करने में मदद करने के लिए कि मैं क्या कर रहा हूं cmake -E echo, वर्तमान कार्य निर्देशिका को दिखाने के लिए तीन कमांड के साथ शुरू करता हूं और ctest कमांड को आमंत्रित किया जाना है। यहाँ मैं कैसे कॉल करता हूं 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
    )

यह MSVC IDE के साथ अच्छा खेलता है जहाँ किसी भी परीक्षण त्रुटियों को क्लिक करने योग्य संकलन त्रुटियों के रूप में दिखाया जाता है। पोर्टेबल कमांड लाइन टूल मोड के प्रलेखन के लिए cmake -E env देखें cmake -E। मैं एक निर्भरता भी जोड़ता हूं ALL_BUILDताकि checkलक्ष्य को लागू करने से पहले सभी परियोजनाओं का निर्माण किया जाएगा । (पर लिनक्स बनाता है, एक बदलना पड़ सकता है ALL_BUILDके साथ ALL;। मैं अभी तक लिनक्स पर यह परीक्षण नहीं किया)


6

विजुअल स्टूडियो का उपयोग करने वाले लोगों के लिए, विषय पर एक और भिन्नता (हैक):

cmake -E env CTEST_OUTPUT_ON_FAILURE=1 cmake --build . --target RUN_TESTS

0

XML फ़ाइल के साथ परिणाम दिखाने के लिए आपको निम्नलिखित कमांड के साथ परीक्षण को निष्पादित करना होगा

~$ ctest -T Test

और हमें परीक्षण / 1234123432 / test.xml में परिणाम मिला और अन्य फाइलें भी परीक्षण फ़ोल्डर में उत्पन्न होती हैं


0

ctest -VV या ctest --extra-verbose

से प्रलेखन :

परीक्षण से अधिक वर्बोज़ आउटपुट सक्षम करें।

टेस्ट आउटपुट सामान्य रूप से दबा हुआ है और केवल सारांश जानकारी प्रदर्शित की जाती है। यह विकल्प और भी अधिक परीक्षण आउटपुट दिखाएगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.