Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Enabling or disabling test unit execution

Boost , Boost.Test , Declaring and organizing tests

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Единая система испытанийобеспечивает возможность включения или отключения выполнения тестового блока. Если тестовый случай отключен, он не будет управляться бегуном. Если тестовый набор отключен, его статус наследуется испытательными блоками под его деревом, если не указано иное.

Статус выполнения может быть переопределен параметрами командной строки: предоставляя соответствующие аргументы командной строке, тест с отключением все еще может быть выполнен. Разделфильтрации тестового блокаподробно описывает эту особенность.

Unconditional run status

Декоратор<disabled>указывает на то, что состояние пробного блокапо умолчаниюявляетсяложным. Это означает, что тестовые случаи внутри этого тестового блока не будут выполняться по умолчанию, если не указано иное. Декоратор<enabled>указывает на то, что состояние запуска тестового блока по умолчаниюистинно. Это означает, что тестовые случаи внутри этого тестового блока будут выполняться по умолчанию, если не указано иное.

Example: decorators enabled and disabled

Код

<
#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>к одному и тому же испытательному блоку. Об этом сообщается как об ошибке установки при запуске программы тестирования.

Compilation-time run status

Декоратор<enable_if>указывает, что состояние запуска тестового блокапо умолчаниюявляется либоистинным, либоложным, в зависимости от значения<Condition>. Это означает, что тестовые случаи внутри этого тестового блока будут или не будут выполняться по умолчанию.

Example: decorator enable_if

Код

<
#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()>.

Runtime run status

Декоратор<precondition>связываетпредикатс испытательным блоком. Перед выполнением тестового блока предикат оценивается с помощью идентификатора тестового блока, принятого в качестве аргумента. Если он оценивает до<false>, выполнение испытательного блока пропускается. Пропуск тестового набора означает пропуск выполнения каждого тестового блока внутри.

Example: decorator precondition

Код

<
#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>пропущено.


PrevUpHomeNext

Статья Enabling or disabling test unit execution раздела Boost.Test Declaring and organizing tests может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Declaring and organizing tests ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 05:09:08/0.005375862121582/0