Изпълнява се 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