首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Catch2:测试两种类型列表的所有排列

Catch2:测试两种类型列表的所有排列
EN

Stack Overflow用户
提问于 2022-09-26 13:22:13
回答 1查看 76关注 0票数 0

我需要用Catch2编写一些单元测试,每个测试用例都应该针对两个类型列表的每一个可能的排列来执行。我喜欢这样的东西

代码语言:javascript
复制
// Some types defined in my project
class A;
class B;

PERMUTATION_TEST_CASE ("Foo", (A, B), (float, double))
{
   TestTypeX x;
   TestTypeY y;
}

其中,测试用例将执行4次

代码语言:javascript
复制
TestTypeX = A, TestTypeY = float
TestTypeX = A, TestTypeY = double
TestTypeX = B, TestTypeY = float
TestTypeX = B, TestTypeY = double

或者,类似这样的事情也是可能的。

代码语言:javascript
复制
constexpr A a;
constexpr B b;

TEMPLATE_TEST_CASE ("Foo", float, double)
{
   auto x = GENERATE (a, b); // does not work because a and b have different types
   TestType y; 
}

据我所知,在catch2中没有这样的东西。在参数化测试用例中,TEMPLATE_TEST_CASE解决了单个类型列表的问题,但不能解决两个列表的每个排列问题,还有TEMPLATE_PRODUCT_TEST_CASE解决了第一类是模板的情况下的问题,然后用第二个列表的每种类型实例化--这也不是我在这里需要的。

对于我目前正在忽略的内容,是否有合适的catch2机制?我使用的是Catch2版本3.1.0。

与这个2x2示例相比,我在现实世界中的需求要大得多,所以手动指定所有排列并不是我最喜欢的选择。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-26 16:32:17

您可以创建类型表的笛卡儿积,然后:

代码语言:javascript
复制
using MyTypes = cross_product<type_list<A, B>, type_list<float, double>>::type;
// using MyTypes = type_list<std::pair<A, float>, std::pair<A, double>,
//                           std::pair<B, float>, std::pair<B, double>>;
TEMPLATE_LIST_TEST_CASE("some_name", "[xxx]", MyTypes)
{
    using TestTypeX = typename TestType::first_type;  // A or B
    using TestTypeY = typename TestType::second_type; // float or double
    // ...
}

同样,TEMPLATE_PRODUCT_TEST_CASE可以与包装器类型一起使用(Ab):

代码语言:javascript
复制
template <typename T>
struct A_with
{
    using first_type = A;
    using second_type = T;
};
template <typename T>
struct B_with
{
    using first_type = B;
    using second_type = T;
};

TEMPLATE_PRODUCT_TEST_CASE("some name", "[xxx]", (A_with, B_with), (float, double))
{
    using TestTypeX = typename TestType::first_type;  // A or B
    using TestTypeY = typename TestType::second_type; // float or double
    // ...
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73854795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档