Здравствуйте, не могу разобраться с тем как включить несколько тестов в проект, по одному все прекрасно работает, но а когда их несколько то все ломается... Вот пример:
// Connects .cpp file, because don't need to
// create a library for testing with .h and .cpp files
#include "Math/Vectors/Vector2f.cpp"
#define BOOST_TEST_MODULE Vector2fTest
#include <boost/test/unit_test.hpp>
BOOST_AUTO_TEST_SUITE(suiteVectors2f)
BOOST_AUTO_TEST_CASE(addVectors2f)
{
float x = 5.0f;
float y = 10.0f;
Math::Vector2f currVector2f(x, y);
Math::Vector2f otherVector2f(x, y);
currVector2f.add(otherVector2f);
BOOST_CHECK_EQUAL(currVector2f.x, x + x);
BOOST_CHECK_EQUAL(currVector2f.y, y + y);
}
BOOST_AUTO_TEST_CASE(subVectors2f)
{
float x = 3.0f;
float y = 7.0f;
Math::Vector2f currVector2f(x, y);
Math::Vector2f otherVector2f(x, y);
currVector2f.sub(otherVector2f);
BOOST_CHECK_EQUAL(currVector2f.x, x - x);
BOOST_CHECK_EQUAL(currVector2f.y, y - y);
}
...
BOOST_AUTO_TEST_SUITE_END()
// Connects .cpp file, because don't need to
// create a library for testing with .h and .cpp files
#include "Math/Vectors/Vector3f.cpp"
#define BOOST_TEST_MODULE Vector3fTest
#include <boost/test/unit_test.hpp>
BOOST_AUTO_TEST_SUITE(suiteVectors3f)
BOOST_AUTO_TEST_CASE(addVectors3f)
{
float x = 5.0f;
float y = 10.0f;
float z = 1.0f;
Math::Vector3f currVector3f(x, y, z);
Math::Vector3f otherVector3f(x, y, z);
currVector3f.add(otherVector3f);
BOOST_CHECK_EQUAL(currVector3f.x, x + x);
BOOST_CHECK_EQUAL(currVector3f.y, y + y);
BOOST_CHECK_EQUAL(currVector3f.z, z + z);
}
BOOST_AUTO_TEST_CASE(subVectors3f)
{
float x = 3.0f;
float y = 7.0f;
float z = 1.0f;
Math::Vector3f currVector3f(x, y, z);
Math::Vector3f otherVector3f(x, y, z);
currVector3f.sub(otherVector3f);
BOOST_CHECK_EQUAL(currVector3f.x, x - x);
BOOST_CHECK_EQUAL(currVector3f.y, y - y);
BOOST_CHECK_EQUAL(currVector3f.z, z - z);
}
...
BOOST_AUTO_TEST_SUITE_END()
make_minimum_required (VERSION 3.8)
include_directories (${CMAKE_SOURCE_DIR}/Sources)
set (TESTS Vector3fTest.cpp Vector2fTest.cpp) #MovableObjectTest.cpp)
add_definitions (-DBOOST_TEST_DYN_LINK)
find_package (Boost COMPONENTS unit_test_framework REQUIRED)
add_executable (Test${PROJECT_NAME} ${TESTS})
target_include_directories (${PROJECT_NAME} PRIVATE
${Boost_INCLUDE_DIRS})
target_link_libraries (Test${PROJECT_NAME} ${Boost_LIBRARIES})
add_test (NAME Vector2fTest COMMAND addVectors2f subVectors2f mulVectors2f divVectors2f)
add_test (NAME Vector3fTest COMMAND addVectors3f subVectors3f mulVectors3f divVectors3f)
CMakeFiles/TestFastEngine.dir/Vector2fTest.cpp.o: In function `init_unit_test()':
/usr/include/boost/test/unit_test_suite.hpp:338: multiple definition of `init_unit_test()'
CMakeFiles/TestFastEngine.dir/Vector3fTest.cpp.o:/usr/include/boost/test/unit_test_suite.hpp:338: first defined here
CMakeFiles/TestFastEngine.dir/Vector2fTest.cpp.o: In function main':
/usr/include/boost/test/unit_test.hpp:62: multiple definition ofmain'
CMakeFiles/TestFastEngine.dir/Vector3fTest.cpp.o:/usr/include/boost/test/unit_test.hpp:62: first defined here
collect2: error: ld returned 1 exit status
Каждый пакет тестов следует собирать в отдельный исполняемый файл. Примерный CMakeLists.txt может выглядеть следующим образом:
сmake_minimum_required (VERSION 3.8)
find_package (Boost COMPONENTS unit_test_framework REQUIRED)
add_definitions (-DBOOST_TEST_DYN_LINK)
include_directories ( ${CMAKE_SOURCE_DIR}/Sources
${Boost_INCLUDE_DIRS})
set (TESTS Vector3fTest Vector2fTest) #MovableObjectTest)
foreach (_test ${TESTS})
add_executable (${_test} ${_test}.cpp)
target_link_libraries (${_test} ${Boost_LIBRARIES})
add_test (NAME ${_test} COMMAND ${_test)
endforeach ()
Запускать все тесты пакетом можно с помощью make test (если добавить в CMakeLists.txt команду enable_testing ()) или с помощью утилиты ctest bp пакета cmake'а. Последняя кроме прочего умеет запускать только определённые тесты по регулярному выражению от имени и делать много-чего ещё.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей