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

Template test cases

Boost , Boost.Test , Test cases

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

Чтобы протестировать компонент на основе шаблона, часто необходимо выполнить один и тот же набор проверок для компонента, инстанциированного с различными параметрами шаблона.Единая система испытанийобеспечивает возможность создания серии тестовых случаев на основе списка желаемых типов и функций, аналогичных шаблону нулевых функций. Это средство называется шаблоном тестового случая. Вот два строительных интерфейса:

  • Шаблон тестового случая с автоматической регистрацией
  • Ручно зарегистрированный шаблон тестового случая
Test case template with automated registration

Для создания шаблона тестового случая, зарегистрированного вместо реализации, использовать макрос<BOOST_AUTO_TEST_CASE_TEMPLATE>. Это устройство также называетсяшаблон автотеста..

BOOST_AUTO_TEST_CASE_TEMPLATE(test_case_name, formal_type_parameter_name, collection_of_types);

Макро<BOOST_AUTO_TEST_CASE_TEMPLATE>требует трех аргументов:

  1. <test_case_name>Название шаблона тестового случая: уникальный идентификатор шаблона тестовых случаев
  2. <formal_type_parameter_name>Наименование формального параметра шаблона: название типа шаблона тестового случая
  3. Сбор типов для создания шаблона тестового случая с: произвольной последовательностью MPL
Example: Test case template with automated registration

Код

<
#defineBOOST_TEST_MODULEexample
#include<boost/test/included/unit_test.hpp>
#include<boost/mpl/list.hpp>
typedefboost::mpl::list<int,long,unsignedchar>test_types;
BOOST_AUTO_TEST_CASE_TEMPLATE(my_test,T,test_types)
{
 BOOST_TEST(sizeof(T)==(unsigned)4);
}
>

выход

<
>example
Running3testcases...
test.cpp(17):error:in"my_test<unsigned char>":checksizeof(T)==(unsigned)4hasfailed[1!=4]
***1failureisdetectedinthetestmodule"example"
>
Test case template with manual registration

Один из способов выполнения одного и того же набора проверок для компонента, инстанцированного с различными параметрами шаблона, проиллюстрирован в следующем примере:

template <typename T>
void single_test()
{
  BOOST_CHECK( /* test assertion */ );
}
void combined_test()
{
  single_test<int>();
  single_test<float>();
  single_test<unsigned char>();
}

Существует несколько проблем/неудобств с вышеуказанным подходом, в том числе:

  • Смертельная ошибка в одном из вызовов остановит весь тестовый случай и пропустит вызовы разных типов.
  • Вы должны повторить вызов функции вручную для всех параметров, которые вас интересуют.
  • Вам нужны две функции для выполнения теста.

В идеале шаблон тестового случая будет основан на шаблоне нулевой функции (например, Single_test выше). К сожалению, шаблоны функций не являются адресными и не могут использоваться в качестве параметров шаблона. Чтобы облегчить проблему, вручную зарегистрированный шаблон тестового случая состоит из двух совместно работающих макросов:<BOOST_TEST_CASE_TEMPLATE_FUNCTION>и<BOOST_TEST_CASE_TEMPLATE>. Прежний используется для определения шаблона тестового корпуса, позже — для создания и регистрации тестовых корпусов на его основе.

Макро<BOOST_TEST_CASE_TEMPLATE_FUNCTION>требует двух аргументов:

  1. название шаблона тестового случая и
  2. Название параметра типа формата
BOOST_TEST_CASE_TEMPLATE_FUNCTION(test_case_name, type_name);
BOOST_TEST_CASE_TEMPLATE_FUNCTION( test_case_name, type_name )
{
  // test case template body
}

Макро<BOOST_TEST_CASE_TEMPLATE_FUNCTION>предназначено для использования вместо подписи шаблона нулевой функции:

template <typename type_name>
void test_case_name()
{
  // test case template body
}

Разница только в том, что<BOOST_TEST_CASE_TEMPLATE_FUNCTION>делает имя шаблона тестового примера пригодным для использования в списке аргументов шаблона.

<BOOST_TEST_CASE_TEMPLATE>требует двух аргументов:

  1. название шаблона тестового случая и
  2. Повышаю. MPL-совместимая коллекция типов для ее создания.

Имена, переданные обоим макросам, должны быть одинаковыми.

BOOST_TEST_CASE_TEMPLATE(test_case_name, collection_of_types);

<BOOST_TEST_CASE_TEMPLATE>создает экземпляр генератора тестового корпуса. При переходе к способу<test_suite::add>генератор производит отдельный подтест для каждого типа в поставляемом наборе типов и регистрирует его сразу в тестовом наборе. Каждый тест-кейс основан на шаблоне тест-кейса, созданном с конкретным типом теста.

Названияподтестовых случаеввыводятся из макроаргумента<test_case_name>. Если вы предпочитаете назначать разные имена тестовых случаев, вам нужно использовать базовый интерфейс<make_test_case>. Создание и регистрация тестовых случаев выполняется в функции инициализации тестового модуля.

[Tip] Tip

Средство шаблона тестового случая предпочтительнее подхода, приведенного в примере выше, поскольку выполнение каждого подтестового случая охраняется и учитывается отдельно. Он дает лучший журнал тестов / отчет о результатах (в примере выше в случае отказа вы не можете сказать, какой тип виноват) и позволяет тестировать все типы, даже если один из них вызывает прекращение подтеста.

Example: Manually registered test case template

Код

<
#include<boost/test/included/unit_test.hpp>
#include<boost/mpl/list.hpp>
usingnamespaceboost::unit_test;
BOOST_TEST_CASE_TEMPLATE_FUNCTION(my_test,T)
{
 BOOST_TEST(sizeof(T)==4U);
}
test_suite*init_unit_test_suite(int/*argc*/,char*/*argv*/[])
{
 typedefboost::mpl::list<int,long,unsignedchar>test_types;
 framework::master_test_suite().
   add(BOOST_TEST_CASE_TEMPLATE(my_test,test_types));
 return0;
}
>

выход

<
>example
Running3testcases...
test.cpp(15):error:in"my_test<unsigned char>":checksizeof(T)==4Uhasfailed[1!=4]
***1failureisdetectedinthetestmodule"Master Test Suite"
>

PrevUpHomeNext

Статья Template test cases раздела Boost.Test Test cases может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Test cases ::


реклама


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

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