是否可以提供gtest类型参数化测试宏类型列表?

问题描述 投票:0回答:1

我发现 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 技巧来“动态”构造类型列表。有没有办法存档我想要的东西?

c++ googletest template-meta-programming
1个回答
0
投票

您可以编写一个执行转换的实用程序:

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(也许有一个)。

演示

© www.soinside.com 2019 - 2024. All rights reserved.