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

BOOST_TEST: universal and general purpose assertions

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_TEST>. Общая форма<BOOST_TEST>выглядит следующим образом:

BOOST_TEST(statement);
BOOST_TEST_<level>(statement, optional_modifiers)

Примером использования может быть следующее:

Example: BOOST_TEST overview

Код

<
#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>, которая может быть практически любой: полное выражение, составленное несколькими операциями, поддерживается и обрабатывается.
  • (a) расширенная возможность отчетности в случае отказа: не только<BOOST_TEST>сообщает местоположение отказа и копию самого<statement>, но и значения операндов, которые позволяют быстро идентифицировать вопросы, связанные с неудавшимся утверждением;
  • возможность лучше контролировать поведение или отчеты о проверках, в частности:
    • сравнение с плавающей точкой: допуск может быть обеспечен либо с использованием<BOOST_TEST>непосредственно с<optional_modifiers>, либо сдекораторами(см.здесьдля более подробной информации),
    • Сравнение контейнеров/сборников: различные операции для сравнения предоставляются из коробки для сравнения набора элементов (по умолчанию, на элемент, лексикографический), с расширенной диагностикой по отказам (покрыто вэтомразделе),
    • Сравнение строк: Опранды C-струн автоматически обнаруживаются и сравнения выполняются так, как если бы использовались<std::string>объекты.
    • необязательное сообщение о сбое,
    • битовое сравнение, обеспечивающее расширенную диагностику при отказе
[Warning] Warning

Чтобы получить все функциональные возможности семейства утверждений<BOOST_TEST>, требуется компилятор C++11, особенно поддерживающий ключевые слова<auto>и<decltype>и вариадные макросы. Документация фокусируется на этом наборе компиляторов. Для компиляторов, не поддерживающих все функции<BOOST_TEST>, макрос<BOOST_TEST_MACRO_LIMITED_SUPPORT>.

Complex statements

<BOOST_TEST>обеспечивает расширенные возможности отчетности: в журнале приводятся дополнительные сведения о неисправных операндах и операциях, как показано на примере ниже:

Example: BOOST_TEST enhanced reporting

Код

<
#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>утверждения: это результат утверждения

Uniform reporting

Данное средство предоставляется в трех вариантах, соответствующих соответствующимуровням тяжести. Эти три уровня утверждений приводятся в журнале испытаний и на выходе, как подробно описано в разделе. Объем доклада зависит от текущегоуровня журналаиуровня доклада.

Limitations & workaround

Есть несколько конструкций, которые, однако, не поддерживаются, но добавление дополнительной скобки обычно решает, что:

  • утверждения, содержащие тройные условия: эти утверждения должны быть окружены скобками, поскольку они не могут быть перегружены;
  • заявления, содержащие запятые: эти заявления будут перехвачены препроцессором
  • составные утверждения, содержащие любую логическую композицию<||>,<&&>. Они нетрудоспособны намеренно и должны быть окружены скобками

    <
    BOOST_TEST((true||false));
    
    >

    . Подробности приведены вэтом разделе

    .
Example: BOOST_TEST limitation and workaround

Код

<
#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
>

PrevUpHomeNext

Статья BOOST_TEST: universal and general purpose assertions раздела Boost.Test Writing unit tests может быть полезна для разработчиков на c++ и boost.




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



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


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-07-04 19:33:10/0.0085101127624512/0