boost::unit_test::test_suite* init_unit_test_suite( int argc, char* argv[] );
Можно определить BOOST_TEST_MAIN или BOOST_TEST_MODULE module_name, чтобы библиотека подставила пустую функцию инициализации.
#include <boost/test/included/unit_test.hpp>
using namespace boost::unit_test;
void test_case1() { /* : */ }
void test_case2() { /* : */ }
void test_case3() { /* : */ }
void test_case4() { /* : */ }
test_suite*
init_unit_test_suite( int argc, char* argv[] )
{
test_suite* ts1 = BOOST_TEST_SUITE( "test_suite1" );
ts1->add( BOOST_TEST_CASE( &test_case1 ) );
ts1->add( BOOST_TEST_CASE( &test_case2 ) );
test_suite* ts2 = BOOST_TEST_SUITE( "test_suite2" );
ts2->add( BOOST_TEST_CASE( &test_case3 ) );
ts2->add( BOOST_TEST_CASE( &test_case4 ) );
framework::master_test_suite().add( ts1 );
framework::master_test_suite().add( ts2 );
return 0;
}
#define BOOST_TEST_MODULE example
#include <boost/test/included/unit_test.hpp>
BOOST_AUTO_TEST_SUITE( test_suite1 )
BOOST_AUTO_TEST_CASE( test_case1 )
{
BOOST_WARN( sizeof(int) < 4 );
}
BOOST_AUTO_TEST_CASE( test_case2 )
{
BOOST_REQUIRE_EQUAL( 1, 2 );
BOOST_FAIL( "Should never reach this line" );
}
BOOST_AUTO_TEST_SUITE_END()
BOOST_AUTO_TEST_SUITE( test_suite2 )
BOOST_AUTO_TEST_CASE( test_case3 )
{
BOOST_CHECK( true );
}
BOOST_AUTO_TEST_CASE( test_case4 )
{
BOOST_CHECK( false );
}
BOOST_AUTO_TEST_SUITE_END()
#include <boost/test/included/unit_test.hpp>
#include <boost/bind.hpp>
using namespace boost::unit_test;
class test_class {
public:
void test_method()
{
BOOST_CHECK( true /* test assertion */ );
}
} tester;
void nullary_test_function()
{
BOOST_CHECK( true /* test assertion */ );
}
void binary_test_function( int i, int j )
{
BOOST_CHECK( true /* test assertion */ );
}
test_suite*
init_unit_test_suite( int argc, char* argv[] )
{
framework::master_test_suite().
add( BOOST_TEST_CASE( boost::bind( &test_class::test_method, &tester )));
framework::master_test_suite().
add( BOOST_TEST_CASE( &free_test_function ) );
framework::master_test_suite().
add( BOOST_TEST_CASE( boost::bind( &free_test_function, 2, 1 ) ) )
return 0;
}
#define BOOST_TEST_MODULE example
#include <boost/test/included/unit_test.hpp>
BOOST_AUTO_TEST_CASE( free_test_function )
{
BOOST_CHECK( true /* test assertion */ );
}
BOOST_PARAM_TEST_CASE(test_function, params_begin, params_end)
#include <boost/test/included/unit_test.hpp>
#include <boost/test/parameterized_test.hpp>
using namespace boost::unit_test;
void free_test_function( int i )
{
BOOST_CHECK( i < 4 /* test assertion */ );
}
test_suite*
init_unit_test_suite( int argc, char* argv[] )
{
int params[] = { 1, 2, 3, 4, 5 };
framework::master_test_suite().
add( BOOST_PARAM_TEST_CASE( &free_test_function, params, params+5 ) );
return 0;
}
Помогает тестировать шаблонные классы и функции. Представляет собой пару макросов:
BOOST_TEST_CASE_TEMPLATE_FUNCTION(test_case_name, type_name)
BOOST_TEST_CASE_TEMPLATE(test_case_name, collection_of_types)
Первый, BOOST_TEST_CASE_TEMPLATE_FUNCTION
, создаёт код теста.
Второй, BOOST_TEST_CASE_TEMPLATE
, создаёт и регистрирует сам тест.
#include <boost/test/included/unit_test.hpp>
#include <boost/test/test_case_template.hpp>
#include <boost/mpl/list.hpp>
using namespace boost::unit_test;
BOOST_TEST_CASE_TEMPLATE_FUNCTION( my_test, T )
{
BOOST_CHECK_EQUAL( sizeof(T), 4 );
}
test_suite*
init_unit_test_suite( int argc, char* argv[] )
{
typedef boost::mpl::list<int,long,unsigned char> test_types;
framework::master_test_suite().
add( BOOST_TEST_CASE_TEMPLATE( my_test, test_types ) );
return 0;
}
#define BOOST_TEST_MODULE example
#include <boost/test/included/unit_test.hpp>
#include <boost/test/test_case_template.hpp>
#include <boost/mpl/list.hpp>
typedef boost::mpl::list<int,long,unsigned char> test_types;
BOOST_AUTO_TEST_CASE_TEMPLATE( my_test, T, test_types )
{
BOOST_CHECK_EQUAL( sizeof(T), (unsigned)4 )
}
struct MyFixture {
MyFixture() { i = new int; *i = 0 } // setup
~ MyFixture() { delete i; } // teardown
int* i;
};
BOOST_AUTO_TEST_CASE( test_case1 )
{
MyFixture f;
// do something involving f.i
}
BOOST_AUTO_TEST_CASE( test_case2 )
{
MyFixture f;
// do something involving f.i
}
#define BOOST_TEST_MODULE example
#include <boost/test/included/unit_test.hpp>
struct F {
F() : i( 0 ) { BOOST_TEST_MESSAGE( "setup fixture" ); }
~F() { BOOST_TEST_MESSAGE( "teardown fixture" ); }
int i;
};
BOOST_FIXTURE_TEST_SUITE( s, F )
BOOST_AUTO_TEST_CASE( test_case1 )
{
BOOST_CHECK( i == 1 );
}
BOOST_AUTO_TEST_CASE( test_case2 )
{
BOOST_CHECK_EQUAL( i, 0 );
}
BOOST_AUTO_TEST_SUITE_END()
Во время тестирования можно выводить сообщения.
При запуске тестового модуля можно указывать, какие тесты или пакеты выполнять.
Существует два формата вывода: human readable log output format и XML.