C++ 使用googletest识别类型参数化测试中使用的基类
一个物理模拟正在翻新,我正在尝试为要使用类型参数化测试替换的函数编写单元测试。基本设置如下所示:C++ 使用googletest识别类型参数化测试中使用的基类,c++,unit-testing,googletest,C++,Unit Testing,Googletest,一个物理模拟正在翻新,我正在尝试为要使用类型参数化测试替换的函数编写单元测试。基本设置如下所示: using MyTypes = ::testing::Types<base1<1>, base1<2>, base2<1>, base2<2>>; TYPED_TEST_CASE(tests, MyTypes); TYPED_TEST(tests, testname){ auto obj = clname(TypeParam); a
using MyTypes = ::testing::Types<base1<1>, base1<2>, base2<1>, base2<2>>;
TYPED_TEST_CASE(tests, MyTypes);
TYPED_TEST(tests, testname){
auto obj = clname(TypeParam);
auto parameters = generate_values(TypeParam);
for( auto& p : parameters ){
// Test if obj.func(p) equals the saved values
}
}
和结果一起,但我被告知,这是一个值,可以在机器之间更改,因此作为一个值不可用。我已尝试在MyTypes中查找相应的条目,即保存I以便
std::is_same<MyTypes[i],TypeParam>::value
std::值是否相同
这是真的,但这似乎不是任何i。使用类型参数化测试有什么好方法可以做到这一点吗?或者我需要完全使用其他东西吗?您可以标记base1
,base1
,base2
,base2
。。。通过一维整数0
,1
,2
,3
。。。使用以下类模板TestsWrapper
。
更具体地说,TestsWrapper::getIdx()
返回类型U
在…T
中的位置。
比如说,
TestsWrapper 您可以标记
,base1
,base1
,base2
。。。通过一维整数base2
,0
,1
,2
。。。使用以下类模板3
。 更具体地说,TestsWrapper
返回类型TestsWrapper::getIdx()
在U
中的位置。 比如说,…T
TestsWrapper 也许会有用也许会有用。。
std::is_same<MyTypes[i],TypeParam>::value
template<class ...T> class TestsWrapper { template<class U> static constexpr std::size_t getIdx_impl() { return 0; } template<class U, class T0, class ...Ts> static constexpr std::size_t getIdx_impl() { return std::is_same<U, T0>::value ? 0 : (getIdx_impl<U, Ts...>() + 1); } public: using Types = ::testing::Types<T...>; template<class U> static constexpr std::size_t getIdx() { return getIdx_impl<U, T...>(); } };
using TWrapper = TestsWrapper<base1<1>, base1<2>, base2<1>, base2<2>>; template <typename T> class test : public ::testing::Test {}; TYPED_TEST_CASE(test, TWrapper::Types); TYPED_TEST(test, testname) { constexpr auto idx = TWrapper::getIdx<TypeParam>(); ... }