![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
DatasetsBoost , Boost.Test , Data-driven test cases
|
![]() |
Tip |
---|---|
Поддерживаются только «мономорфные» наборы данных, что означает, что все образцы в наборе данных имеют одинаковый тип и одинаковую проходимость.. |
Как мы увидим в следующих разделах, наборы данных, представляющие коллекции различных типов, могут быть объединены вместе (например,зипилисетка).. Эти операции приводят к появлению новых наборов данных, в которых образцы имеют дополненный тип.
Интерфейс набора данныхдолжен реализовывать две следующие функции/поля:
iteratorbegin()
>гдеитераторявляется передним итератором,boost::unit_test::data::size_tsize()const
>указывает размер набора данных. Возвращенный тип представляет собой выделенный класс<size_t
>, который может указывать набесконечныйразмер набора данных.arity
>, указывающее на количество образцов, возвращенных набором данных;После того, как класс набора данных<D
>объявлен, он должен быть зарегистрирован в структуре путем специализации класса.
boost::unit_test::data::monomorphic::is_dataset
с условием, что
boost::unit_test::data::monomorphic::is_dataset<D>::value
Для оценки<true
>.
Следующий пример реализует пользовательский набор данных, генерирующий последовательность Фибоначчи.
Код |
---|
<#defineBOOST_TEST_MODULEdataset_example68 #include<boost/test/included/unit_test.hpp> #include<boost/test/data/test_case.hpp> #include<boost/test/data/monomorphic.hpp> #include<sstream> namespacebdata=boost::unit_test::data; // Dataset generating a Fibonacci sequence classfibonacci_dataset{ public: // Samples type is int usingsample=int; enum{arity=1}; structiterator{ iterator():a(1),b(1){} intoperator*()const {returnb;} voidoperator++() { a=a+b; std::swap(a,b); } private: inta; intb;// b is the output }; fibonacci_dataset() {} // size is infinite bdata::size_t size()const {returnbdata::BOOST_TEST_DS_INFINITE_SIZE;} // iterator iterator begin()const {returniterator();} }; namespaceboost{namespaceunit_test{namespacedata{namespacemonomorphic{ // registering fibonacci_dataset as a proper dataset template<> structis_dataset<fibonacci_dataset>:boost::mpl::true_{}; }}}} // Creating a test-driven dataset BOOST_DATA_TEST_CASE( test1, fibonacci_dataset()^bdata::make({1,2,3,5,8,13,21,35,56}), fib_sample,exp) { BOOST_TEST(fib_sample==exp); }> |
выход |
---|
<>example68 Running9testcases... test.cpp(60):error:in"test1/_7":checkfib_sample==exphasfailed[34!=35] Failureoccurredinafollowingcontext: fib_sample=34;exp=35; test.cpp(60):error:in"test1/_8":checkfib_sample==exphasfailed[55!=56] Failureoccurredinafollowingcontext: fib_sample=55;exp=56; ***2failuresaredetectedinthetestmodule"dataset_example68"> |
В будущем будут рассмотрены полиморфные наборы данных. Их потребность в основном обусловлена заменойтипизированных параметризированных тестовых случаевнабором данных, подобным API.
Статья Datasets раздела Boost.Test Data-driven test cases может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Data-driven test cases ::
реклама |