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

Custom predicate support

Boost , Boost.Test , Writing unit 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

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

Первый слой поддерживается<BOOST_<level>_PREDICATE>семейством инструментов тестирования. Вы можете использовать его, чтобы проверить любой пользовательский предикат, который сообщает результат как булево значение. Значения аргументов предиката сообщаются инструментом автоматически в случае отказа.

Example: Custom predicate support using BOOST_<level>_PREDICATE

Код

<
#defineBOOST_TEST_MODULEexample
#include<boost/test/included/unit_test.hpp>
boolis_even(inti)
{
 returni%2==0;
}
BOOST_AUTO_TEST_CASE(test_is_even)
{
 BOOST_CHECK_PREDICATE(is_even,(14));
 inti=17;
 BOOST_CHECK_PREDICATE(is_even,(i));
}
>

выход

<
>example
Running1testcase...
test.cpp(13):errorin"test_is_even":checkis_even(i)hasfailedfor(17)
***1failuresisdetectedintestsuite"example"
>

Чтобы использовать второй слой, ваш предикат должен вернуться<boost::test_tools::predicate_result>.

Этот класс инкапсулирует значение булевого результата вместе с любой ошибкой или информационным сообщением, которое вы решите сообщить.

Обычно вы строите экземпляр класса<boost::test_tools::predicate_result>внутри функции предиката и возвращаете его по стоимости. Конструктор ожидает одного аргумента — значения булевого результата. Конструктор неявный, так что вы можете просто вернуть значение булева от вашего предиката и<boost::test_tools::predicate_result>построен автоматически, чтобы держать ваше значение и пустое сообщение. Вы также можете присвоить булевое значение построенному экземпляру. Вы можете проверить текущее значение предиката, используя<operator!>или напрямую получая доступ к публичному свойству только для чтения<p_predicate_value>. Сообщение об ошибке хранится в публичном свойстве чтения-записи<p_message>.

Example: Custom predicate support using class boost::test_tools::predicate_result

Код

<
#defineBOOST_TEST_MODULEexample
#include<boost/test/included/unit_test.hpp>
boost::test_tools::predicate_result
 compare_lists(std::list<int>const&l1,std::list<int>const&l2)
{
 if(l1.size()!=l2.size())
 {
   boost::test_tools::predicate_resultres(false);
   res.message()<<"Different sizes ["<<l1.size()<<"!="<<l2.size()<<"]";
   returnres;
 }
 returntrue;
}
BOOST_AUTO_TEST_CASE(test_list_comparison)
{
 std::list<int>l1,l2;
 l1.push_back(1);
 l1.push_back(2);
 BOOST_TEST(compare_lists(l1,l2));
}
>

выход

<
Running1testcase...
test.cpp(28):errorin"test_list_comparizon":checkcompare_lists(l1,l2)hasfailed.Differentsizes[2!=0]
***1failuresisdetectedintestsuite"example"
>

PrevUpHomeNext

Статья Custom predicate support раздела Boost.Test Writing unit tests может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Writing unit tests ::


реклама


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

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