我发现 gtest 类型参数化测试在构建单元测试方面非常有效。但是,我想知道是否可以避免对 ::testing::Types<> 中的类型进行硬编码?
这是来自 gtest 网站的示例:
using MyTypes = ::testing::Types<char, int, unsigned int>;
INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes);
我一直在使用 boost mp11 进行模板元编程(TMP)。使用 mp11,我可以轻松构建包含不同类型的列表。因此,我希望我可以执行以下操作,而不是在
char, int, unsigned int
中硬编码 ::testing::Types<>
:
using L1 = mp_list_c<char, int, uint32_t>;
using MyTypes = ::testing::Types<L1>;
INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes);
我在这里展示的示例似乎没有多大收获,因为 L1 也是硬编码的。然而,如果
::testing::Types<>
可以接受某种类型列表,我就会使用 TMP 技巧来“动态”构造类型列表。有没有办法存档我想要的东西?
您可以编写一个执行转换的实用程序:
template<typename T>
struct ToTestTypes;
template<template<typename ...> typename U, typename...Ts>
struct ToTestTypes<U<Ts...>>
{
using type = ::testing::Types<Ts...>;
};
template<typename T>
using ToTestTypes_t = typename ToTestTypes<T>::type;
我无法找到与它相当的 gtest(也许有一个)。