![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
ContextsBoost , Boost.Test , Tools supports for logging
|
Код |
---|
<#defineBOOST_TEST_MODULEexample80 #include<boost/test/included/unit_test.hpp> voidtest() { BOOST_TEST(false); } BOOST_AUTO_TEST_CASE(test_case1) { BOOST_TEST_INFO("Alpha"); BOOST_TEST_INFO("Beta"); BOOST_TEST(true); BOOST_TEST_INFO("Gamma"); chara='a'; BOOST_TEST_INFO("Delt"<<a); test(); }> |
выход |
---|
<>example Running1testcase... test.cpp(14):error:in"test_case1":checkfalsehasfailed Failureoccurredinafollowingcontext: Gamma Delta ***1failuresisdetectedintestmodule"example80"> |
Соблюдайте следующие вещи. Информация, содержащаяся внутри<BOOST_TEST_INFO
>, связана только с первым утверждением после заявления. Таким образом, связанная информация отображается только в случае неудачи утверждения; в противном случае сообщение отбрасывается. Декларация<BOOST_TEST_INFO
>не должна непосредственно предшествовать утверждению, допускается их переплетение с другими инструкциями, они могут быть заявлены даже в разных объемах. Следовательно, можно также связать более одной информации с данным утверждением.
С<BOOST_TEST_INFO
>мы можем улучшить наш первоначальный пример следующим образом:
void test_operations(Processor& processor, int limit, int level) { for (int i = 0; i < limit; ++i) { BOOST_TEST_INFO("With optimization level " << level); BOOST_TEST_INFO("With parameter i = " << i); BOOST_TEST(processor.op1(i)); for (int j = 0; j < i; ++j) { BOOST_TEST_INFO("With optimization level " << level); BOOST_TEST_INFO("With parameter i = " << i); BOOST_TEST_INFO("With parameter j = " << j); BOOST_TEST(processor.op2(i, j)); } } } BOOST_AUTO_TEST_CASE(test1) { Processor processor; for (int level = 0; level < 3; ++level) { processor.optimization_level(level); test_operations(processor, 2, level); } }
Макро<BOOST_TEST_CONTEXT
>определяет диагностическое сообщение и область применения. Сообщение связано с каждым утверждением в объеме и отображается вместе с каждым неудавшимся утверждением.
Код |
---|
<#defineBOOST_TEST_MODULEexample81 #include<boost/test/included/unit_test.hpp> voidtest() { BOOST_TEST(2!=2); } BOOST_AUTO_TEST_CASE(test_case1) { BOOST_TEST_CONTEXT("Alpha"){ BOOST_TEST(1!=1); test(); BOOST_TEST_CONTEXT("Be"<<"ta") BOOST_TEST(3!=3); BOOST_TEST(4==4); } BOOST_TEST(5!=5); }> |
выход |
---|
<>example Running1testcase... test.cpp(20):error:in"test_case1":check1!=1hasfailed[1==1] Failureoccurredinafollowingcontext: Alpha test.cpp(14):error:in"test_case1":check2!=2hasfailed[2==2] Failureoccurredinafollowingcontext: Alpha test.cpp(24):error:in"test_case1":check3!=3hasfailed[3==3] Failureoccurredinafollowingcontext: Alpha Beta test.cpp(29):error:in"test_case1":check5!=5hasfailed[5==5] ***4failuresaredetectedintestmodule"example81"> |
Соблюдайте следующие вещи. После макроса<BOOST_TEST_CONTEXT
>у нас есть пара брекетов: они определяют область, в которой действует диагностическое сообщение. Если брекеты отсутствуют, то сфера применения распространяется только на следующее утверждение.<BOOST_TEST_CONTEXT
>Объявления могут гнездиться.
С помощью<BOOST_TEST_CONTEXT
>мы можем еще больше улучшить наш первоначальный пример, поместив переменную<level
>в контекст уровня охвата и не передав его в качестве функционального параметра:
void test_operations(Processor& processor, int limit) { for (int i = 0; i < limit; ++i) { BOOST_TEST_INFO("With parameter i = " << i); BOOST_TEST(processor.op1(i)); for (int j = 0; j < i; ++j) { BOOST_TEST_INFO("With parameter i = " << i); BOOST_TEST_INFO("With parameter j = " << j); BOOST_TEST(processor.op2(i, j)); } } } BOOST_AUTO_TEST_CASE(test1) { Processor processor; for (int level = 0; level < 3; ++level) { BOOST_TEST_CONTEXT("With optimization level " << level) { processor.optimization_level(level); test_operations(processor, 2); } } }
Если мы увидим, что переменная<i
>также применима в определенной области, мы сможем еще больше улучшить наш пример.
Код |
---|
<#defineBOOST_TEST_MODULEexample82 #include<boost/test/included/unit_test.hpp> structProcessor { intlevel; voidoptimization_level(intl){level=l;} boolop1(int){returnlevel<2;} boolop2(int,int){returnlevel<1;} }; voidtest_operations(Processor&processor,intlimit) { for(inti=0;i<limit;++i){ BOOST_TEST_CONTEXT("With parameter i = "<<i){ BOOST_TEST(processor.op1(i)); for(intj=0;j<i;++j){ BOOST_TEST_INFO("With parameter j = "<<j); BOOST_TEST(processor.op2(i,j)); } } } } BOOST_AUTO_TEST_CASE(test1) { Processorprocessor; for(intlevel=0;level<3;++level){ BOOST_TEST_CONTEXT("With optimization level "<<level){ processor.optimization_level(level); test_operations(processor,2); } } }> |
выход |
---|
<>example Running1testcase... test.cpp(27):error:in"test1":checkprocessor.op2(i,j)hasfailed Failureoccurredinafollowingcontext: Withoptimizationlevel1 Withparameteri=1 Withparameterj=0 test.cpp(24):error:in"test1":checkprocessor.op1(i)hasfailed Failureoccurredinafollowingcontext: Withoptimizationlevel2 Withparameteri=0 test.cpp(24):error:in"test1":checkprocessor.op1(i)hasfailed Failureoccurredinafollowingcontext: Withoptimizationlevel2 Withparameteri=1 test.cpp(27):error:in"test1":checkprocessor.op2(i,j)hasfailed Failureoccurredinafollowingcontext: Withoptimizationlevel2 Withparameteri=1 Withparameterj=0 ***4failuresaredetectedinthetestmodule"example82"> |
Статья Contexts раздела Boost.Test Tools supports for logging может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Tools supports for logging ::
реклама |