CMake kullanarak CTest'ten nasıl ayrıntılı çıktı alabilirim?


109

Projemi oluşturmak için CMake kullanıyorum. Boost birim testi çerçevesini kullanan bir birim testi ikili dosyası ekledim. Bu tek ikili, tüm birim testlerini içerir. CTest tarafından çalıştırılacak ikili dosyayı ekledim:

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

Ancak Visual Studio'daki derleme çıktısı yalnızca CTest çalıştırmanın sonucunu gösterir:

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

  0% tests passed, 1 tests failed out of 1

Bu pek yardımcı olmadı çünkü hangi testin başarısız olduğunu göremiyorum. Komut satırından ctest'i manuel olarak çalıştırırsam --verbose, gerçekte neyin başarısız olduğunu söyleyen bir Boost birim testinden çıktı alırım:

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

Öyleyse, CTest'in --verboseher zaman çalışması için CMakeLists.txt'de neyi değiştirmem gerekiyor ? CMake / CTest ile Boost birim testlerini kullanmanın daha iyi bir yolu var mı?


Yanıtlar:


92

CTEST_OUTPUT_ON_FAILURETest başarısız olduğunda size test programından herhangi bir çıktı gösterecek olan ortam değişkenini ayarlayabilirsiniz . Makefiles ve komut satırını kullanırken bunu yapmanın bir yolu aşağıdaki gibi olacaktır:

env CTEST_OUTPUT_ON_FAILURE=1 make check

Bu Yığın Taşması sorusu ve yanıtı , Visual Studio'da ortam değişkenlerinin nasıl ayarlanacağını gösterir.


3
Benim için çalışmıyor (ctest sürümü 2.8.12.1). Denedim SET(CTEST_OUTPUT_ON_FAILURE TRUE)ve SET(CTEST_OUTPUT_ON_FAILURE ON)fakat hiçbir etkisi yoktur. Web'deki diğer raporlar bunun bozuk olduğunu doğruluyor.
Joachim W

4
@JoachimWuttke set(CTEST_OUTPUT_ON_FAILURE TRUE)bir ortam değişkeni ayarlamaz . Komut satırında bu deneyin: CTEST_OUTPUT_ON_FAILURE=TRUE make test.
thehouse

3
make CTEST_OUTPUT_ON_FAILURE=1 testdaha kısa ve daha güzel IMO'dur.
Timmmm

Windows toplu iş dosyasında, çağrı sırasında CTEST_OUTPUT_ON_FAILURE = 1 nasıl kullanılır - msbuild /toolsversion:15.0 / p: Configuration = Release / p: Platform = x64 TESTS.vcxproj
Toral

34

ctestYaptıktan ve projenizi yaptıktan sonra doğrudan arayabilirsiniz .

ctest --verbose

29
  1. Testing/TemporaryAlt klasörü kontrol edebilirsiniz . Make test çalıştırıldıktan sonra otomatik olarak oluşturulur. Bu klasör iki dosya içerir: LastTest.logve LastTestsFailed.log. LastTest.logçalıştırma testleri için istenen çıktıyı içerir. LastTestFailed.logbaşarısız testlerin adlarını içerir. Böylece çalıştırdıktan sonra bunları manuel olarak kontrol edebilirsiniz make test.

  2. İkinci yol, testleri çalıştırdıktan sonra ctest'in size günlük dosyalarının içeriğini göstermesini sağlamaktır:

    1. içinde yer inşa dir (hangi çalıştırmak make test) dosyasını CTestCustom.ctest (siz bunu yapabilir yapılandırmak dosya örneğin komutuyla) ile aşağıdaki içerikler

      CTEST_CUSTOM_POST_TEST ("kedi Testi / Geçici / LastTest.log")

Kedi yerine, benzer şeyler yapan Windows cmd komutunu kullanabilirsiniz.

  1. make testtekrar koş ve kar et!

ctest'i özelleştirme hakkında ek bilgiyi burada bulabilirsiniz . Sadece "cmake'yi özelleştirme" bölümüne geçin. İyi şanslar!


1
Tamam teşekkürler. Ctest için proje / makefile dosyalarına eklenen bayrakları değiştirmenin bir yolu olacağını umuyordum, ancak hiçbir şey bulamadım ve cevabınız bunu onaylıyor gibi görünüyor. Dosya adı bilgisi faydalıdır!
Skrymsli

1
ctest 2.8.10 civarında bir yerde CTEST_CUSTOM_POST_TEST içindeki bağımsız değişkenlerle harici komutları kullanarak kırdılar bkz. github.com/openscad/openscad/issues/260
don bright

@don: belki ctest üzerinde yeterince test yapmıyorlardır ;-)
Joachim W

CTEST_CUSTOM_POST_TEST ile ilgili bu CMake sorunu 2.8.12'de düzeltilmiştir.
Ela782

23

Kendi kendime "kontrol" hedefi eklemek zorunda kaldım. "test yapmak" herhangi bir nedenle hiçbir şey yapmaz. Yaptığım şey (stackoverflow'da bir yerde önerildiği gibi) - Bu hedefi manuel olarak ekledim. Ayrıntılı çıktı elde etmek için şöyle yazdım:

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

21

Çok basit bir çözüm var (bazı nedenlerden dolayı Google Arama ile bulmak zor):

ctest --output-on-failure

CMake'i Visual Studio'nun açık klasör işleviyle kullanıyorsanız,

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

yapı yapılandırmanıza ayarlanıyor.


1
Çözümünüzü çok beğendim; başarısızlık dışında ayrıntılı değildir.
AnthonyD973

19

make check CTEST_OUTPUT_ON_FAILURE=TRUE


6
Tüm olumsuz oylar oldukça şaşırtıcı: bu neredeyse kabul edilen cevaba eşdeğer, ancak daha kısa ve daha güzel. Ayrıca test ettiğim projede çalışıyor.
zbyszek

2
CTEST_OUTPUT_ON_FAILURE = 1 test yap
Alex Punnen

11

Bu, test çıktısını daha ayrıntılı hale getirir:

make test ARGS="-V"

10

Benim yaklaşımım ony , zbyszek ve tarc'tan gelen cevapların bir kombinasyonudur . Kullandığım ${CMAKE_COMMAND}değişken (mutlak yol ayarlanır çağrılan cmake çalıştırılabilir) ile -E env CTEST_OUTPUT_ON_FAILURE=1kullanılarak gerçek ctest komutu çağırmak için bağımsız değişkeni ${CMAKE_CTEST_COMMAND} -C $<CONFIG>. Neler olup bittiğini açıklığa kavuşturmak cmake -E echoiçin, geçerli çalışma dizinini ve çağrılacak ctest komutunu göstermek için üç komutla başlıyorum . İşte böyle ararım 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
    )

Bu, herhangi bir test hatasının tıklanabilir derleme hataları olarak gösterildiği MSVC IDE ile iyi oynar. Taşınabilir komut satırı aracı kipinin belgeleri için cmake -E env belgesine bakın cmake -E. Hedefi ALL_BUILDçağırmadan önce tüm projelerin inşa edilmesi için bir bağımlılık ekliyorum check. (Açık Linux biri değiştirmeniz gerekebilir, inşa ALL_BUILDile ALL;. Henüz Linux üzerinde bu test değil)


6

Visual Studio kullanan kişiler için burada temanın başka bir varyasyonu (hack):

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

0

sonucu XML dosyasıyla göstermek için testi aşağıdaki komutla yürütmeniz gerekir

~$ ctest -T Test

ve sonucu Testing / 1234123432 / test.xml'de bulduk ve diğer dosyalar da Testing Folder'da oluşturuluyor


0

ctest -VV veya ctest --extra-verbose

Gönderen belgeler :

Testlerden daha ayrıntılı çıktı alın.

Test çıktısı normalde bastırılır ve yalnızca özet bilgiler görüntülenir. Bu seçenek daha da fazla test çıktısı gösterecektir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.