【发布时间】:2019-03-06 12:35:31
【问题描述】:
我正在寻找一个允许同时传递类型和值参数来测试功能的单元测试框架。
示例:假设我有一些模板排序功能:
template<class ITERATOR, class COMPARATOR = std::less<typename std::iterator_traits<ITERATOR>::value_type>>
void selectionSort(const ITERATOR first,const ITERATOR last, const COMPARATOR comparator = COMPARATOR ()){ ... };
template<class ITERATOR, class COMPARATOR = std::less<typename std::iterator_traits<ITERATOR>::value_type>>
void insertionSort(const ITERATOR first,const ITERATOR last, const COMPARATOR comparator = COMPARATOR ()) { ... }
我想用不同的输入类型测试这些函数:
template<class T>
vector<T> makeRandomVector(int size){ ... }
vector<int> intVec = makeRandomVector<int>(10); //10 is vector size
someSort(intVec.begin(),intVec.end())
vector<MyCustomStruct> structVec = makeRandomVector<MyCustomStruct>(10);
someSort(structVec.begin(),structVec.end())
如果向量大小为 0、1、10 等,则 makeRandomVector 使用不同大小的参数来测试这些函数。
所以我正在寻找 C++ 单元测试框架,它允许创建可以同时接受类型 (int,MyCustomStruct) 和值参数 (0,1,10) 的测试,并对笛卡尔积的每个元素执行测试类型 x 值。
【问题讨论】:
-
这里是一个起点。 en.wikipedia.org/wiki/List_of_unit_testing_frameworks,如果您能提供有关您的开发环境的更多详细信息,那就太好了。
-
我认为 Catch2 是您正在寻找的:github.com/catchorg/Catch2/blob/master/docs/…
-
我花了很多时间才明白 Google 测试无法满足我的需求。需要对特定测试框架有很好的了解才能回答我的问题,这就是我在这里提出问题的原因
-
从我读到的 Catch2 只允许类型而不是类型和值参数化。强硬我可能是错的
-
关于开发环境:我愿意为 Linux 和 Windows 免费设置任何可用的东西。目前我在 Windows 上使用 Qt creator。
标签: c++ unit-testing