Jul*_*esW 5 c++ boost boost-test
我使用 boost.test 进行单元测试(目前使用 boost 1.71.0)。我有一个模板类,我想用数据集进行测试。
我只能找到测试不同模板参数(使用BOOST_AUTO_TEST_CASE_TEMPLATE)或数据集(使用BOOST_DATA_TEST_CASE)的方法。但我找不到混合模板和数据集的方法。
这是我所取得的成就的 MWE,并评论了我正在尝试做的事情。
test.cpp:
#define BOOST_TEST_MODULE data_template
#include <boost/mpl/list.hpp>
#include <boost/test/data/test_case.hpp>
#include <boost/test/unit_test.hpp>
#include <vector>
#include <list>
#include <numeric> // std::accumulate
template <typename C>
struct Testee{
C container;
typename C::value_type f(){
// just a dummy function to be tested
return std::accumulate(container.begin(),container.end(),0);
}
};
typedef boost::mpl::list<std::vector<double>, std::list<double>, std::vector<size_t>> container_types;
template <class T> void test_containers(size_t size)
{
Testee<T> t;
t.container = T(size,1);
BOOST_CHECK_EQUAL(t.f(), size);
}
// test on all container types but only with size=100 (3 test cases)
BOOST_AUTO_TEST_CASE_TEMPLATE(test1, T, container_types)
{
test_containers<T>(100);
}
// test with several container sizes but only for vector<double> (6 test cases)
BOOST_DATA_TEST_CASE(test2, boost::unit_test::data::make({0, 1, 2, 10, 100, 1000}), size)
{
test_containers<std::vector<double>>(size);
}
// What I'm looking for looks like:
// // test for each combination of container type and size (6*3=18 test cases)
// BOOST_DATA_TEST_CASE_TEMPLATE(test3, T, container_types, boost::unit_test::data::make({0, 1, 2, 10, 100, 1000}), size)
// {
// test_containers<T>(size);
// }
Run Code Online (Sandbox Code Playgroud)
CMakeLists.txt:
CMAKE_MINIMUM_REQUIRED( VERSION 3.5 )
PROJECT(data_template_test
LANGUAGES CXX)
set (CMAKE_CXX_FLAGS "-std=c++17 -Wall ${CMAKE_CXX_FLAGS}")
find_package(Boost 1.59 REQUIRED COMPONENTS unit_test_framework)
add_executable(${PROJECT_NAME} test.cpp)
target_link_libraries(${PROJECT_NAME} Boost::unit_test_framework)
target_compile_definitions(${PROJECT_NAME} PRIVATE BOOST_TEST_DYN_LINK)
Run Code Online (Sandbox Code Playgroud)
MWE 生成 9 个无错误通过的测试用例,但我想要所有类型的所有大小的组合,因此 3x6=18 个测试用例。有没有办法使用boost-test来做到这一点?也许使用一些更冗长/不太友好的 API?
感谢您的帮助!
| 归档时间: |
|
| 查看次数: |
314 次 |
| 最近记录: |