Существует очень мало проблем с размещенным вами образцом проекта.
Кажется, вы ошибочно предположили, что:
add_test(NAME Test COMMAND Test_TestTester)
в вашем new_test_source/CMakeLists.txt
- это все, что нужно дляполучить Test_TestTester
, выполненный make
.
Фактически, как объявлено в первой строке add_test
документации :
Добавитьтест для проекта, запускаемого ctest (1).
ваша add_test
команда достаточна только для запуска Test_TestTester
, когда после make
вы запускаете ctest
в каталоге сборки подпроекта Test_TestTester
.
Более того, даже это произойдет, только если вы включите ctest
тестирование для этого подпроекта, вызвав enable_testing()
в new_test_source/CMakeLists.txt
что вы не делаете.Вы говорите, что сделали это позже:
Использование enable_testing () с последующим add_test () также не может привести к каким-либо изменениям.
Но это потому, что вы до сих пор этого не сделалиничего не делал, кроме создания тестов , которые вы можете запускать с ctest
, и при этом еще не запускать ctest
.
Итак, предположим, у меня есть ваш пример проекта в моем рабочем каталоге (который у меня есть), и что я только что изменил new_test_source/CMakeLists.txt
, изменив:
project(Test_TestTester)
на:
project(Test_TestTester)
enable_testing()
Затем:
$ mkdir build
$ cd build
$ cmake ..
генерируетсистема сборки и:
$ make
Scanning dependencies of target TestTester
[ 25%] Building CXX object existing_source/CMakeFiles/TestTester.dir/main.cpp.o
[ 50%] Linking CXX executable TestTester
[ 50%] Built target TestTester
Scanning dependencies of target Test_TestTester
[ 75%] Building CXX object new_test_source/CMakeFiles/Test_TestTester.dir/main_test.cpp.o
[100%] Linking CXX executable Test_TestTester
[100%] Built target Test_TestTester
собирает все, и:
# We're still in `./build`
$ cd new_test_source/
$ ctest
Test project /home/imk/develop/so/scrap2/build/new_test_source
Start 1: Test
1/1 Test #1: Test ............................. Passed 0.00 sec
100% tests passed, 0 tests failed out of 1
Total Test time (real) = 0.00 sec
запускает ваши тесты.Полный журнал испытаний сохраняется по адресу:
$ cat ./Testing/Temporary/LastTest.log
Start testing: Feb 12 19:23 GMT
----------------------------------------------------------
1/1 Testing: Test
1/1 Test: Test
Command: "/home/imk/develop/so/scrap2/build/new_test_source/Test_TestTester"
Directory: /home/imk/develop/so/scrap2/build/new_test_source
"Test" start time: Feb 12 19:23 GMT
Output:
----------------------------------------------------------
Running main() from /home/imk/develop/so/scrap2/new_test_source/main_test.cpp
[==========] Running 2 tests from 2 test suites.
[----------] Global test environment set-up.
[----------] 1 test from SampleTestCase
[ RUN ] SampleTestCase.TestOneIsOne
[ OK ] SampleTestCase.TestOneIsOne (0 ms)
[----------] 1 test from SampleTestCase (0 ms total)
[----------] 1 test from ExistingCodeTestCase
[ RUN ] ExistingCodeTestCase.TestSample
[ OK ] ExistingCodeTestCase.TestSample (0 ms)
[----------] 1 test from ExistingCodeTestCase (0 ms total)
[----------] Global test environment tear-down
[==========] 2 tests from 2 test suites ran. (0 ms total)
[ PASSED ] 2 tests.
<end of output>
Test time = 0.00 sec
----------------------------------------------------------
Test Passed.
"Test" end time: Feb 12 19:23 GMT
"Test" time elapsed: 00:00:00
----------------------------------------------------------
End testing: Feb 12 19:23 GMT
Если вы хотите видеть все это на своей консоли в то время, когда вы запускаете ctest
, вы можете запустить его в подробном режиме ctest -V
.Или, если вы хотите увидеть подробности, если тесты не пройдены, ctest --output-on-failure
.
Все работает так, как должно, и, возможно, вы довольны этим, зная, как это работает.Если вы все еще хотите, чтобы ваши тесты запускались автоматически с помощью make
- что не является традиционным - тогда вам нужно добавить пользовательскую команду после сборки к цели Test_TestTester
для запуска ctest
автоматически.Просто добавьте, например,
add_custom_command(TARGET Test_TestTester
COMMENT "Run tests"
POST_BUILD COMMAND ctest ARGS --output-on-failure
)
к new_test_source/CMakeLists.txt
.Тогда вывод чистой make
будет:
$ make
Scanning dependencies of target TestTester
[ 25%] Building CXX object existing_source/CMakeFiles/TestTester.dir/main.cpp.o
[ 50%] Linking CXX executable TestTester
[ 50%] Built target TestTester
Scanning dependencies of target Test_TestTester
[ 75%] Building CXX object new_test_source/CMakeFiles/Test_TestTester.dir/main_test.cpp.o
[100%] Linking CXX executable Test_TestTester
Run tests
Test project /home/imk/develop/so/scrap2/build/new_test_source
Start 1: Test
1/1 Test #1: Test ............................. Passed 0.00 sec
100% tests passed, 0 tests failed out of 1
Total Test time (real) = 0.00 sec
[100%] Built target Test_TestTester