![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Enabling or disabling test unit executionBoost , Boost.Test , Declaring and organizing tests
|
Код |
---|
<#defineBOOST_TEST_MODULEdecorator_05 #include<boost/test/included/unit_test.hpp> namespaceutf=boost::unit_test; BOOST_AUTO_TEST_SUITE(suite1,*utf::disabled()) BOOST_AUTO_TEST_CASE(test1) { BOOST_TEST(1!=1); } BOOST_AUTO_TEST_CASE(test2,*utf::enabled()) { BOOST_TEST(2!=2); } BOOST_AUTO_TEST_SUITE_END()> |
выход |
---|
<>decorator_05 Running1testcase... test.cpp(14):error:in"suite1/test2":check2!=2hasfailed[2==2] ***1failureisdetectedinthetestmodule"decorator_05" >decorator_05--list_content suite1* test1 test2*> |
Синтаксически можно применить как декораторы<enabled
>, так и<disabled
>к одному и тому же испытательному блоку. Об этом сообщается как об ошибке установки при запуске программы тестирования.
Декоратор<enable_if
>указывает, что состояние запуска тестового блокапо умолчаниюявляется либоистинным, либоложным, в зависимости от значения<Condition
>. Это означает, что тестовые случаи внутри этого тестового блока будут или не будут выполняться по умолчанию.
Код |
---|
<#defineBOOST_TEST_MODULEdecorator_06 #include<boost/test/included/unit_test.hpp> namespaceutf=boost::unit_test; constboolio_implemented=true; constbooldb_implemented=false; BOOST_AUTO_TEST_CASE(test_io, *utf::enable_if<io_implemented>()) { BOOST_TEST(1!=1); } BOOST_AUTO_TEST_CASE(test_db, *utf::enable_if<db_implemented>()) { BOOST_TEST(2!=2); }> |
выход |
---|
<>decorator_06 Running1testcase... test.cpp(11):error:in"test_io":check1!=1hasfailed[1==1] ***1failureisdetectedinthetestmodule"decorator_06" >decorator_06--list_content test_io* test_db> |
Декоратор<enable_if<true>()
>эквивалентен декоратору<enabled()
>. Так же<enable_if<false>()
>эквивалентно декоратору<disabled()
>.
Декоратор<precondition
>связываетпредикатс испытательным блоком. Перед выполнением тестового блока предикат оценивается с помощью идентификатора тестового блока, принятого в качестве аргумента. Если он оценивает до<false
>, выполнение испытательного блока пропускается. Пропуск тестового набора означает пропуск выполнения каждого тестового блока внутри.
Код |
---|
<#defineBOOST_TEST_MODULEdecorator_08 #include<boost/test/included/unit_test.hpp> namespaceutf=boost::unit_test; namespacett=boost::test_tools; BOOST_AUTO_TEST_CASE(test1) { BOOST_TEST(true); } BOOST_AUTO_TEST_CASE(test2) { BOOST_TEST(false); } structif_either { std::stringtc1,tc2; if_either(std::stringt1,std::stringt2) :tc1(t1),tc2(t2){} tt::assertion_resultoperator()(utf::test_unit_id) { auto&master=utf::framework::master_test_suite(); auto&collector=utf::results_collector_t::instance(); auto&test1_result=collector.results(master.get(tc1)); auto&test2_result=collector.results(master.get(tc2)); if(test1_result.passed()||test2_result.passed()) returntrue; tt::assertion_resultans(false); ans.message()<<tc1<<" and "<<tc2<<" failed"; returnans; } }; BOOST_AUTO_TEST_CASE(test3, *utf::precondition(if_either("test1","test2"))) { BOOST_TEST(false); } BOOST_AUTO_TEST_CASE(test4, *utf::precondition(if_either("test2","test3"))) { BOOST_TEST(false); }> |
выход |
---|
<>decorator_08--log_level=test_suite Running4testcases... Enteringtestmodule"decorator_08" test.cpp(6):Enteringtestcase"test1" test.cpp(6):Leavingtestcase"test1";testingtime:1ms test.cpp(11):Enteringtestcase"test2" test.cpp(13):error:in"test2":checkfalsehasfailed test.cpp(11):Leavingtestcase"test2";testingtime:2ms test.cpp(39):Enteringtestcase"test3" test.cpp(41):error:in"test3":checkfalsehasfailed test.cpp(39):Leavingtestcase"test3";testingtime:2ms test.cpp(45):Testcase"test4"isskippedbecausetest2andtest3failed Leavingtestmodule"decorator_08";testingtime:16ms ***2failuresaredetectedinthetestmodule"decorator_08"> |
В приведенном выше примере пользователь определил пользовательский предикат<if_either
>, который оценивает до<true
>, если прошел хотя бы один из двух указанных тестов. (Предполагается, что тесты регистрируются в определенном порядке.) Для испытания<test3
>необходимо предварительное условие<test1
>или<test2
>. Предпосылка выполнена, поэтому<test3
>выполняется (и не выполняется). Тестовый корпус<test4
>имеет предварительное условие, которое либо<test2
>, либо<test3
>прошло. Поскольку они оба потерпели неудачу, предварительное условие не выполнено, поэтому<test4
>пропущено.
Статья Enabling or disabling test unit execution раздела Boost.Test Declaring and organizing tests может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Declaring and organizing tests ::
реклама |