Как организовать данные фикстуры и получить к ним доступ из тестов в C/C++

Как вычислить путь к файлам фикстур данных в тестовом коде, учитывая:

  • test/{main.cpp,one_test.cpp,two_test.cpp}
  • компиляция сделана в build/
  • test/fixtures/{conf_1.cfg}

Проблема, с которой я сталкиваюсь, заключается в следующем:

/* in test/one_test.cpp */
TEST_CASE( "Config from file", "[config]" ) {
  Config conf;
  REQUIRE( conf.read(??? + "/conf_1.cfg") )
}

Решение, которое я нашел до сих пор, заключается в определении макроса во время настройки:

#define TEST_DIR "/absolute/path/to/test"

который получается у меня wscript с

def configure(cnf):
    # ...
    cnf.env.TEST_DIR = cnf.path.get_src().abspath()
    cnf.define('TEST_DIR', cnf.env.TEST_DIR)
    cnf.write_config_header('include/config.h')

Другие попытки включены __FILE__ который расширился до ../test/one_test.cpp, но я не мог использовать это.

Немного предыстории: я использую платформу тестирования Catch с инструментом сборки waf.

Существует ли распространенная практика или модель, возможно, зависящая от структуры тестирования?

1 ответ

Мы обнаружили, что это трудно решить во время компиляции / сборки, поскольку компоненты рефакторинга (и, следовательно, тесты) будут перемещать код. Мы нашли два возможных решения:

  1. Положите данные в тест. Это практично, только если оно короткое и удобочитаемое - строки или простой шестнадцатеричный дамп. Вы всегда можете поместить данные в заголовочный файл, если это облегчит обслуживание теста.
  2. Укажите расположение файлов данных в командной строке при запуске тестов. Для этого вам может потребоваться собственный main (см. "Предоставление собственного main()"
Другие вопросы по тегам