Для декларирования и регистрации тестового случая на основе данных следует использовать макросы BOOST_DATA_TEST_CASE
или BOOST_DATA_TEST_CASE_F
. Эти две формы эквивалентны, с той разницей, что BOOST_DATA_TEST_CASE_F
поддерживает светильники.
Эти макросы являются вариадными и могут использоваться в следующих формах:
BOOST_DATA_TEST_CASE
(test_case_name, dataset) { }
BOOST_DATA_TEST_CASE(test_case_name, dataset, var1) { }
BOOST_DATA_TEST_CASE(test_case_name, dataset, var1, ..., varN) { }
BOOST_DATA_TEST_CASE_F
(fixture, test_case_name, dataset) { }
BOOST_DATA_TEST_CASE_F(fixture, test_case_name, dataset, var1) { }
BOOST_DATA_TEST_CASE_F(fixture, test_case_name, dataset, var1, ..., varN) { }
Первая форма макроса для наборов данных arity 1. Значение выборки, выполняемой испытательным органом, доступно через автоматическую переменную выборка
( диапазон
, так как ее название предполагает диапазон значений):
BOOST_DATA_TEST_CASE( test_case_arity1_implicit, data::xrange(5) )
{
BOOST_TEST((sample <= 4 && sample >= 0));
}
Вторая форма также для наборов данных arity 1, но вместо переменной выборка
текущая выборка приведена в var1
:
BOOST_DATA_TEST_CASE( test_case_arity1, data::xrange(5), my_var )
{
BOOST_TEST((my_var <= 4 && my_var >= 0));
}
Третья форма является расширением предыдущей формы для наборов данных arity N
. Образец представляет собой полиморфный кортеж, каждая из переменных var1
, ..., varN
соответствует индексу 1, ... N
образца:
BOOST_DATA_TEST_CASE( test_case_arity2, data::xrange(2) ^ data::xrange(5), apples, potatoes)
{
BOOST_TEST((apples <= 1 && apples >= 0));
BOOST_TEST((potatoes <= 4 && potatoes >= 0));
}
Следующие три формы декларации, с BOOST_DATA_TEST_CASE_F
, эквивалентны предыдущим, с разницей в поддержке светильника, который выполняется перед испытательным органом для каждого образца. Аппарат должен следовать ожидаемому интерфейсу как подробно здесь .
Прочность набора данных и число переменных должны быть точно такими же, причем первая форма является краткой для случая проходимости 1.
![[Tip]](/img/tip.png) |
Tip |
Проверка времени компиляции выполняется по когерентности частотности набора данных и количеству переменных var1 ... varN . Для компиляторов без поддержки C++11 максимальная поддерживаемая аритмия контролируется макросом BOOST_TEST_DATASET_MAX_ARITY , который может быть переопределен приор с включением заголовков Unit Test Framework. |
Следует подчеркнуть, что эти макросы не объявляют ни одного тестового случая (как это делает BOOST_AUTO_TEST_CASE
), а объявляют и регистрируют столько тестовых случаев, сколько имеется образцов в наборе данных, приведенных в аргументе. Каждый тестовый случай выполняется точно по одному образцу набора данных.
Точнее, что
BOOST_DATA_TEST_CASE
(test_case_name, dataset)
имеется в виду следующее:
- регистрирует test suite
test_case_name
,
- он регистрирует столько тестовых случаев, сколько они есть в "
dataset
", каждый из которых с именем, соответствующим индексу выборки в базе данных, приставленной
("
", "
", ... "-)
", где N
- размер набора данных
Это облегчает:
- определить, какой образец не подходит (скажем "
test_case_name/_3
)
- позволяет воспроизводить один или несколько образцов (или полный набор данных) из командной строки с помощью фильтрации Unit Test Framework
Точно так же, как и в обычных тест-кейсах, каждый тест-кейс (связанный с конкретным образцом) выполняется в тестовом корпусе охраняемым образом:
- выполнение теста является независимым: если ошибка возникает для одного образца, то выполнение остальных образцов не влияет на результат
- в случае ошибки контекст, в котором произошла ошибка, сообщается в log наряду с неисправным индексом выборки. Этот контекст содержит образец, для которого тест не удался, что облегчит отладку.