Повышение. Тест: Поиск рабочего нетривиального Примера Набора тестов / [закрытое] Учебное руководство

33
задан Robert S. Barnes 27 May 2010 в 07:57
поделиться

2 ответа

Модульное тестирование C ++ с помощью Boost.Test

(постоянная ссылка: http://web.archive.org/web/20160524135412/http://www.alittlemadness.com / 2009/03/31 / c-unit-testing-with-boosttest / )

Вышеупомянутая блестящая статья лучше, чем настоящая документация по Boost.

Редактировать:

Я также написал сценарий Perl, который автоматически сгенерировать make-файл и проект скелет из списка имен классов, включая оба теста "все в одном" набор и автономный набор тестов для каждый класс. Это называется makeSimple и может быть загружен с Sourceforge.net.

Я обнаружил, что основная проблема заключается в том, что если вы хотите разделить тесты на несколько файлов, вам нужно связать их с предварительно скомпилированной средой выполнения тестов, а не использовать версию Boost.Test «только заголовки». Вы должны добавить #define BOOST_TEST_DYN_LINK в каждый файл, а при включении заголовков Boost, например, используйте вместо .

Итак, чтобы скомпилировать как одиночный тест:

g++ test_main.cpp test1.cpp test2.cpp -lboost_unit_test_framework -o tests

или скомпилировать отдельный тест:

g++ test1.cpp -DSTAND_ALONE -lboost_unit_test_framework -o test1

.

// test_main.cpp
#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_MODULE Main
#include <boost/test/unit_test.hpp>

// test1.cpp
#define BOOST_TEST_DYN_LINK
#ifdef STAND_ALONE
#   define BOOST_TEST_MODULE Main
#endif
#include <boost/test/unit_test.hpp>

BOOST_AUTO_TEST_SUITE(test1_suite)

BOOST_AUTO_TEST_CASE(Test1)
{
    BOOST_CHECK(2<1);
}

BOOST_AUTO_TEST_SUITE_END()

// test2.cpp
#define BOOST_TEST_DYN_LINK
#ifdef STAND_ALONE
#   define BOOST_TEST_MODULE Main
#endif
#include <boost/test/unit_test.hpp>

BOOST_AUTO_TEST_SUITE(test2_suite)

BOOST_AUTO_TEST_CASE(Test1)
{
    BOOST_CHECK(1<2);
}

BOOST_AUTO_TEST_SUITE_END()
44
ответ дан 27 November 2019 в 18:20
поделиться

Я не знаю, что еще вам действительно нужно, кроме того, что в последующем руководстве. Именно так я сделал все, что мне нужно. Не уверен, что я понимаю ваше описание.

Одна вещь, о которой вы, возможно, просите, - это возможность иметь более одного файла .cpp в вашей тестовой программе. Это так же просто, как определить BOOST_TEST_MODULE только в одном из этих файлов .cpp. У нас есть файл «driver.cpp» во всех наших тестовых программах, который просто определяет его и включает заголовок модульного теста. Все остальные файлы .cpp (в зависимости от модуля или концепции) включают только заголовок модульного теста, они не определяют эту переменную.

Если вы хотите иметь возможность компилировать их вместе и компилировать по отдельности, вы можете использовать свою собственную переменную -D для определения BOOST_TEST_MODULE или нет.

Если вы ищете способ запустить несколько тестовых программ за один прогон и получить отчет, вы можете взглянуть на метод выполнения тестов automake или, что еще лучше, метод CMake (CTest). Уверен, что вы можете использовать CTest из своего собственного make-файла, если будете настаивать.

8
ответ дан 27 November 2019 в 18:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: