![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
BOOST_TEST: universal and general purpose assertionsBoost , Boost.Test , Writing unit tests
|
Код |
---|
<#defineBOOST_TEST_MODULEboost_test_macro_overview #include<boost/test/included/unit_test.hpp> BOOST_AUTO_TEST_CASE(test_macro_overview) { namespacett=boost::test_tools; inta=1; intb=2; BOOST_TEST(a!=b-1); BOOST_TEST(a+1<b); BOOST_TEST(b-1>a,a<<" < "<<b-1<<" does not hold"); BOOST_TEST(a==b,tt::bitwise()); BOOST_TEST(a+0.1==b-0.8,tt::tolerance(0.01)); }> |
выход |
---|
<>./boost_test_macro_overview--log_level=all Running1testcase... Enteringtestmodule"boost_test_macro_overview" test.cpp:12:Enteringtestcase"test_macro_overview" test.cpp:17:error:in"test_macro_overview":checka!=b-1hasfailed[1==1] test.cpp:18:error:in"test_macro_overview":checka+1<bhasfailed[1+1>=2] test.cpp:19:error:in"test_macro_overview":1<1doesnothold test.cpp:20:error:in"test_macro_overview":checka==bhasfailed[1!=2].Bitwisecomparisonfailed Mismatchatposition0 Mismatchatposition1 test.cpp:21:error:in"test_macro_overview":checka+0.1==b-0.8hasfailed[1+0.10000000000000001!=1.2].Relativedifferenceexceedstolerance[0.0909091>0.01] test.cpp:12:Leavingtestcase"test_macro_overview";testingtime:380us Leavingtestmodule"boost_test_macro_overview";testingtime:459us ***5failuresaredetectedinthetestmodule"boost_test_macro_overview"> |
Основными особенностями этого инструмента являются:
statement
>, которая может быть практически любой: полное выражение, составленное несколькими операциями, поддерживается и обрабатывается.BOOST_TEST
>сообщает местоположение отказа и копию самого<statement
>, но и значения операндов, которые позволяют быстро идентифицировать вопросы, связанные с неудавшимся утверждением;BOOST_TEST
>непосредственно с<optional_modifiers
>, либо сдекораторами(см.здесьдля более подробной информации),std::string
>объекты.![]() |
Warning |
---|---|
Чтобы получить все функциональные возможности семейства утверждений< |
<BOOST_TEST
>обеспечивает расширенные возможности отчетности: в журнале приводятся дополнительные сведения о неисправных операндах и операциях, как показано на примере ниже:
Код |
---|
<#defineBOOST_TEST_MODULEboost_test_macro3 #include<boost/test/included/unit_test.hpp> BOOST_AUTO_TEST_CASE(test_op_reportings) { inta=13,b=12; BOOST_TEST(a==b); BOOST_TEST(a<b); BOOST_TEST(a-1<b); BOOST_TEST(b>a-1); }> |
выход |
---|
<>./boost_test_macro3--log_level=all Running1testcase... Enteringtestmodule"boost_test_macro3" test.cpp(12):Enteringtestcase"test_op_reportings" test.cpp(15):error:in"test_op_reportings":checka==bhasfailed[13!=12] test.cpp(16):error:in"test_op_reportings":checka<bhasfailed[13>=12] test.cpp(17):error:in"test_op_reportings":checka-1<bhasfailed[13-1>=12] test.cpp(18):error:in"test_op_reportings":checkb>a-1hasfailed[12<=12] test.cpp(12):Leavingtestcase"test_op_reportings";testingtime:484us Leavingtestmodule"boost_test_macro3";testingtime:588us ***2failuresaredetectedinthetestmodule"boost_test_macro3"> |
<BOOST_TEST
>разбирает<statement
>и конструирует из него выражение.<statement
>могут представлять собой сложные выражения, содержащие практически любой из перегружаемых операторов в C++:
Класс операции |
операторы |
---|---|
Бинарные сравнения |
< |
арифметические композиции |
< |
битовые композиции |
< |
Задания |
< |
<statement
>оценивается и ставится на<bool
>, как если бы это выглядело как аргумент для<if
>утверждения: это результат утверждения
Данное средство предоставляется в трех вариантах, соответствующих соответствующимуровням тяжести. Эти три уровня утверждений приводятся в журнале испытаний и на выходе, как подробно описано в разделе. Объем доклада зависит от текущегоуровня журналаиуровня доклада.
Есть несколько конструкций, которые, однако, не поддерживаются, но добавление дополнительной скобки обычно решает, что:
составные утверждения, содержащие любую логическую композицию<||
>,<&&
>. Они нетрудоспособны намеренно и должны быть окружены скобками
BOOST_TEST((true||false));>
. Подробности приведены вэтом разделе
.
Код |
---|
<#defineBOOST_TEST_MODULEboost_test_macro_workaround #include<boost/test/included/unit_test.hpp> #include<sstream> BOOST_AUTO_TEST_CASE(test_logical_not_allowed) { // Boost Unit Test Framework prevents compilation of // BOOST_TEST(true && true); BOOST_TEST((true&&true));// with extra brackets, it works as expected } BOOST_AUTO_TEST_CASE(test_ternary) { inta=1; intb=2; // Boost Unit Test Framework prevents compilation of // BOOST_TEST(a == b ? true : false); BOOST_TEST((a+1==b?true:false));// again works as expected with extra brackets }> |
выход |
---|
<>./boost_test_macro_workaround--log_level=all Running2testcases... Enteringtestmodule"boost_test_macro_workaround" test.cpp:13:Enteringtestcase"test_logical_not_allowed" test.cpp:17:info:check(true&&true)haspassed test.cpp:13:Leavingtestcase"test_logical_not_allowed";testingtime:183us test.cpp:20:Enteringtestcase"test_ternary" test.cpp:26:info:check(a+1==b?true:false)haspassed test.cpp:20:Leavingtestcase"test_ternary";testingtime:123us Leavingtestmodule"boost_test_macro_workaround";testingtime:547us ***Noerrorsdetected> |
Статья BOOST_TEST: universal and general purpose assertions раздела Boost.Test Writing unit tests может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Writing unit tests ::
реклама |