Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Организовать несколько suite в один проект?


Автор: EvilsInterrupt 3.5.2012, 10:51
Прошу помощи в освоении boost::test.

На данный момент пользуясь <boost/test/unit_test.hpp> организовал несколько cpp-файлов в каждом из них
написана реализация тестирования различных классов.

На данный момент не понимаю, как можно объединить эти ClassOneTest.cpp и ClassTwoTest.cpp в один проект?
А точнее я не понимаю что надо написать в главной функции программы main() , чтобы тесты заработали?

Были попытки использовать бустовое, но когда включаю в cpp-файл <boost\test\included\unit_test.hpp> я получаю
реализацию main() из буста, но при подключении второго cpp в котором тоже это включен этот хидер, то видимо
там тоже main() есть

Автор: boostcoder 3.5.2012, 10:56
boost.test особо не использовал. из-за лени, по всей видимости. свои велосипеды рукоблужу.

дока по boost.test славится своей доходчивостью. разве в ней нет ответов на твой вопрос?
или же смотри примеры в <boost root>/libs/test/example

Автор: EvilsInterrupt 3.5.2012, 11:06
Цитата(boostcoder @ 3.5.2012,  11:56)
boost.test особо не использовал. из-за лени, по всей видимости. свои велосипеды рукоблужу.

дока по boost.test славится своей доходчивостью. разве в ней нет ответов на твой вопрос?
или же смотри примеры в <boost root>/libs/test/example

Пока мои тесты ClassOneTest.cpp и ClassTwoTest.cpp написаны примерно так как указано в:
$(BoostDir)\libs\test\example\unit_test_example_05.cpp

Но вот что дальше? Вот этого пока понять не могу! Должны же как-то все дороги вести в main() , 
но вот как они должны вести, как проложены этого пока понять не могу!

Автор: EvilsInterrupt 29.5.2012, 21:19
Сегодня был найден ответ на этот вопрос, благодаря опыту более опытного товарища. Возможно здесь, на форуме меня не совсем поняли. Привожу версию вопроса после чего может быть будет лучше понятней моя проблема:
Цитата

Я привык писать тест для одного класса в виде отдельного *.cpp файла в котором оформлен один Suite включающий себя
множество тестовых случаев нужных для тестирования только для одного этого класса. Сейчас мои *.cpp очень похожи на
то что есть в примере из boost: 
e:\source\boost_1_49_0\libs\test\example\unit_test_example_05.cpp

Вопрос : как несколько *.cpp файлов объединить в одном exe-файле?

Другими словами:
proj:
  ClassOneTest.cpp
  ClassTwoTest.cpp
  appmain.cpp

Как должна быть написана функция main() в файле appmain.cpp?


Ответ товарища:
Цитата

 Я привык писать тест для одного класса в виде отдельного *.cpp файла

Разумно.

> Вопрос : как несколько *.cpp файлов объединить в одном exe-файле?

test_main.cpp

 #define BOOST_TEST_MODULE testMain
 #include <boost/test/unit_test.hpp>

test_1.cpp

 #include <boost/test/unit_test.hpp>

 BOOST_AUTO_TEST_CASE(test1)
 {
          BOOST_CHECK(...);
 }

test_2.cpp

 #include <boost/test/unit_test.hpp>

 BOOST_AUTO_TEST_CASE(test2)
 {
          BOOST_CHECK(...);
 }

Компилируется обычным способом. В статье, кстати, есть пример.

> Как должна быть написана функция main() в файле appmain.cpp?

Ее писать не нужно - она будет развернута из макросов автоматически.


и того:
main.cpp:
Код

#include "std.hpp"

#define BOOST_TEST_MODULE testMain
#include <boost/test/unit_test.hpp>


testOne.cpp:
Код

#include "std.hpp"


#include <boost/test/unit_test.hpp>

BOOST_AUTO_TEST_SUITE( suiteOne )

BOOST_AUTO_TEST_CASE( testOne )
{
    bool a = false;
    BOOST_CHECK( a == true );
}

BOOST_AUTO_TEST_SUITE_END()


testTwo.cpp:
Код

#include "std.hpp"


#include <boost/test/unit_test.hpp>

BOOST_AUTO_TEST_SUITE( suiteTwo )

BOOST_AUTO_TEST_CASE( testTwo )
{
    bool a = false;
    BOOST_CHECK( a == true );
}

BOOST_AUTO_TEST_SUITE_END()


Привел решение для того чтобы у другого решилась подобная проблема быстрее, чем у меня.

Автор: boostcoder 29.5.2012, 21:24
EvilsInterrupt, спасибо, конечно smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)