При использовании CMake + CTest + CDash можно ли установить дополнительное тестовое устройство?

Я использую CMake FIXTURES_SETUP/FIXTURES_REQUIRED для запуска тестов только при наличии внешнего ресурса. Тем не менее, внешний ресурс является необязательным (доступен на некоторых тестовых компьютерах, но не на других), поэтому при сбое устройства, проверяющего ресурс, я не хочу считать, что набор тестов вышел из строя, я просто не хочу запускать какие-либо тесты которые требуют крепления. Есть ли способ пометить тестовое приспособление как "допущенное к сбою". Я знаю, что есть WILL_FAIL, но это инвертирует смысл теста, так что он будет отмечен как сбой при прохождении.

0 ответов

Нет. Когда вы добавляете тест, это означает, что вы ожидаете, что этот тест пройдёт. Когда обязательное условие этого теста не выполняется, CMake пропускает этот тест (на самом деле не запускает его) и считает его неудачным, потому что он не прошел.

например

# CMakeLists.txt
cmake_minimum_required(VERSION 3.3)

project(example)

enable_testing()

add_test(NAME failIfUnavail COMMAND false)
add_test(NAME dependentTest1 COMMAND true)
add_test(NAME dependentTest2 COMMAND true)
add_test(NAME cleaner COMMAND true)

set_tests_properties(failIfUnavail PROPERTIES FIXTURES_SETUP example_case)
set_tests_properties(dependentTest1 dependentTest2 PROPERTIES FIXTURES_REQUIRED example_case)
set_tests_properties(cleaner PROPERTIES FIXTURES_CLEANUP example_case)
$ cmake -H. -Bbuild
-- The C compiler identification is GNU 8.2.0
-- The CXX compiler identification is GNU 8.2.0
-- Check for working C compiler: /bin/gcc
-- Check for working C compiler: /bin/gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /bin/g++
-- Check for working CXX compiler: /bin/g++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /build
$ cmake --build build/ --target test
Running tests...
Test project /home/pamini/cmake_test1/build
    Start 1: failIfUnavail
1/4 Test #1: failIfUnavail ....................***Failed    0.00 sec
    Start 2: dependentTest1
Failed test dependencies: failIfUnavail
2/4 Test #2: dependentTest1 ...................***Not Run   0.00 sec
    Start 3: dependentTest2
Failed test dependencies: failIfUnavail
3/4 Test #3: dependentTest2 ...................***Not Run   0.00 sec
    Start 4: cleaner
4/4 Test #4: cleaner ..........................   Passed    0.00 sec

25% tests passed, 3 tests failed out of 4

Total Test time (real) =   0.02 sec

The following tests FAILED:
          1 - failIfUnavail (Failed)
          2 - dependentTest1 (Not Run)
          3 - dependentTest2 (Not Run)
Errors while running CTest
gmake: *** [test] Error 8

Что вы можете сделать, это:

  1. Если доступность ресурса известна во время настройки, проверяйте и добавляйте тесты только тогда, когда вы ожидаете, что они пройдут.
  2. Если доступность ресурса не известна во время настройки, измените сами тесты, чтобы учесть эту неопределенность. Например, модульные тесты позволяют избежать этой проблемы, используя фиктивные объекты, которые имитируют поведение ресурсов, от которых они зависят.
Другие вопросы по тегам