...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
The latest version of Boost Test Library is available online at http://www.boost.org/libs/test.
You can send a bug report to the boost users' mailing list and/or fill a ticket here https://svn.boost.org/trac/boost/.
You can send a request to the boost developers' mailing list and/or and/or fill a ticket here https://svn.boost.org/trac/boost/.
To create a test case, use the macro
BOOST_AUTO_TEST_CASE
( test_function );
For more details see the Unit Test Framework BOOST_AUTO_TEST_CASE
documentation.
To create a test suite use the macro
BOOST_AUTO_TEST_SUITE
( suite_name );
For more details see the Unit Test Framework BOOST_AUTO_TEST_SUITE
documentation.
Boost Test Library components provide several usage variants: to create a test program you can link with the one of the precompiled library variants or use header-only variant. For example, to use Unit Test Framework you may either include
#include <boost/test/unit_test.hpp>
and link with
libunit_test_framework.lib
or you can include
#include <boost/test/included/unit_test.hpp>
in which case you should not need to link with any pre-compiled component. Note also that you should strictly follow specification on initialization function in other case some compilers may produce linker error like this.
Unresolved external init_unit_test_suite(int, char**).
The reason for this error is that in your implementation you should specify
second argument of init_unit_test_suite
exactly as in the specification, i.e.: char* []
.
Use
unit_test_log::instance().set_log_output( std::ostream & )
For more details see the Unit Test Framework output test stream documentation.
Use environment variable BOOST_TEST_LOG_LEVEL
to define desired
log trace level. You still will be able to reset this value from the command
line. For the list of acceptable values see the Unit Test Framework
runtime configuration documentation.
Yes. Starting with Boost 1.34.0.
Suppose, you are building a test module from one translation unit test_file.cpp
. First, let's do it using the header-only
usage variant of the Unit Test Framework.
Let's paste the following content in a CMakeLists.txt
at the
same location than our test file test_file.cpp
:
cmake_minimum_required(VERSION 2.8.7) project(my_first_test) enable_testing() # indicates the location of the boost installation tree. # hard-coded for our simple example. set(BOOST_INCLUDE_DIRS $boost_installation_prefix/include) # creates the executable add_executable(test_executable test_file.cpp) # indicates the include paths target_include_directories(test_executable PRIVATE ${BOOST_INCLUDE_DIRS}) # declares a test with our executable add_test(NAME test1 COMMAND test_executable)
We will now create the build directory for this project (separate directory), configure and build the project, as follow:
> cd $test_path > mkdir build > cd build > cmake .. > cmake --build . > ctest
we create a directory dedicated to the build, to avoid any pollution of the sources with the temporary build files |
|
configuration of the project |
|
this command builds the project, cmake drives a native tool that is configured on the previous command line |
|
runs the tests declared in the project and prints a report |
In the case you are using the shared libraries variant of Unit Test Framework, some modifications should be done in your CMakeLists.txt.
cmake_minimum_required(VERSION 2.8.11) project(my_first_test) enable_testing() # replace XX with the version you have set(Boost_ADDITIONAL_VERSIONS "1.XX" "1.XX.0") # finds boost, triggers an error otherwise find_package(Boost XX REQUIRED COMPONENTS unit_test_framework) # creates the executable add_executable(test_executable test_file.cpp) # indicates the include paths target_include_directories(test_executable PRIVATE ${Boost_INCLUDE_DIRS}) # indicates the shared library variant target_compile_definitions(test_executable PRIVATE "BOOST_TEST_DYN_LINK=1") # indicates the link paths target_link_libraries(test_executable ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}) # declares a test with our executable add_test(NAME test1 COMMAND test_executable)
We will now create the build directory for this project (separate directory), configure and build the project, as follow:
> cd $test_path > mkdir build > cd build > cmake -DBOOST_ROOT=$boost_installation_prefix .. > cmake --build . > ctest
we create a directory dedicated to the build, to avoid any pollution of the sources with the temporary build files |
|
configuration of the project, the |
|
this command builds the project, cmake drives a native tool that is configured on the previous command line |
|
runs the tests declared in the project and prints a report |