c++ - Boost 测试用例混合数据集和模板
问题描述
我正在使用 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);
// }
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)
MWE 生成了 9 个测试用例,并且没有错误地通过,但我想要所有类型和所有大小的组合,所以 3x6=18 个测试用例。有没有办法使用 boost-test 来做到这一点?也许使用一些更冗长/不太友好的 API?
感谢您的帮助!
解决方案
推荐阅读
- javascript - 滚动时的jQuery不透明度被切断
- python - catalina 10.51.1 python3 w brew 或 xcode-select
- android - 如何在android datepicker中获取月份的第一个和最后一个日期
- django - 将views.py中的视图合并为一个视图?
- c++ - 你愿意就我的程序程序给我反馈吗?
- c# - 当使用 Fody.PropertyChanged 将文本添加到文本框时,为什么我的按钮没有启用?
- swiftui - 如何在 SwiftUI 中显示整个 CALayer 内容?
- c++ - c++ 类对象与另一个类的序列化
- asp.net - 获取“用户'TestUser'登录失败。” 在通过 ASP.Net 程序连接到 DB 期间
- javascript - 请问有什么方法可以将这些数据处理成所需的格式吗?