Запуск Boost.Test без вызова основного метода

Я пытаюсь проверить части своего кода. Я написал следующий test.h файл:

#include <boost/test/unit_test.hpp>

BOOST_AUTO_TEST_CASE(my_test) {
    BOOST_CHECK(true);
}

Если я запускаю тест, вызывается основной метод моего приложения, и, поскольку аргументы командной строки отсутствуют, он завершается. Я хочу просто запустить набор тестов как есть и добиться успеха, поскольку BOOST_CHECK на true должен быть пройденным тестом. Как только это сработает, я добавлю вызовы функций из моей кодовой базы один за другим для регрессионного тестирования. Возможно ли это сделать? Если да, то как?

В этом сообщении предлагается добавить следующее определение в начало файла test.h, но оно не работает для пропуска вызова основного метода:

#define BOOST_TEST_NO_MAIN true

person BullyWiiPlaza    schedule 28.12.2018    source источник
comment
А как насчет просто #define BOOST_TEST_NO_MAIN. Это определено до того, как вы включаете? это помочь?   -  person Tas    schedule 28.12.2018


Ответы (1)


BOOST_TEST_NO_MAIN заставляет Boost.Test пропустить свою основную функцию, поэтому он вернется к основной функции приложения.

В своих модульных тестах не связывайте основную функцию приложения (не добавляйте файл, содержащий main), и позвольте Boost.Test добавить свою собственную основную функцию, которая будет запускать все ваши тесты.

person erenon    schedule 28.12.2018
comment
Это может сработать, но я предпочитаю не изменять файл CMakeLists.txt или что-либо еще для запуска тестов. Я заметил, что использование, например. другая структура, такая как Catch, работает только в том случае, если я закомментирую свой исходный метод main, чтобы избежать дублирования определения main. Я родом из Java, где запуск разных исходных файлов тестов с точкой входа позволяет сосуществовать, что весьма удобно. - person BullyWiiPlaza; 28.12.2018
comment
@BullyWiiPlaza: ну, здесь это не работает. Сделайте вашу основную функцию действительно крошечной, например: простой вызов ваших приложений main, тогда у вас не будет этой проблемы. - person erenon; 28.12.2018