使用 google test 将类型名和字符串传递给参数化测试

2024-03-23

有没有一种方法可以使用谷歌的测试将类型和字符串传递给参数化测试。

我想要做:

template <typename T>
class RawTypesTest : public ::testing::TestWithParam<const char * type> {
protected:
  virtual void SetUp() {
       message = type;
  }
}; 

TEST_P(RawTypesTest, Foo) {
  ASSERT_STREQ(message, type);
  ParamType * data = ..;
  ...
}

提前致谢


值参数化测试不适用于传递类型信息;您只能通过类型化或类型参数化测试来做到这一点。在这两种情况下,您都必须将类型和字符串信息打包到特殊的结构中。这是如何完成的类型参数化测试 https://github.com/google/googletest/blob/master/googletest/docs/advanced.md#type-parameterized-tests:

template <typename T> class RawTypesTest : public testing::Test {
 public:
  virtual void SetUp() {
    this->message_ = TypeParam::kStringValue;
  }

 protected:
  const char* const message_;
};

TYPED_TEST_CASE_P(RawTypesTest);

TYPED_TEST_P(RawTypesTest, DoesFoo) {
  ASSERT_STREQ(message, TypeParam::kStringValue);
  TypeParam::Type* data = ...;
}

TYPED_TEST_P(RawTypesTest, DoesBar) { ... }

REGISTER_TYPED_TEST_CASE_P(FooTest, DoesFoo, DoesBar);

现在您必须定义参数结构并实例化它们的测试:

struct TypeAndString1 {
  typedef Type1 Type;
  static const char* kStringValue = "my string 1";
};
const char* TypeAndString1::kStringValue;

struct TypeAndString2 {
  typedef Type1 Type;
  static const char* kStringValue = "my string 2";
};
const char* TypeAndString2::kStringValue;

typedef testing::Types<TypeAndString1, TypeAndString2> MyTypes;
INSTANTIATE_TYPED_TEST_CASE_P(OneAndTwo, RawTypeTest, MyTypes);

您可以使用宏来简化参数类型的定义:

#define MY_PARAM_TYPE(name, type, string) \
  struct name { \
    typedef type Type; \
    static const char kStringValue = string; \
  }; \
  const char* name::kStringValue

然后参数结构的定义变得更短:

MY_PARAM_TYPE(TypeAndString1, Type1, "my string 1");
MY_PARAM_TYPE(TypeAndString2, Type2, "my string 2");

这相当复杂,但没有简单的方法可以做到这一点。我最好的建议是尝试重构您的测试,以避免同时需要类型和值信息。但如果你必须这样做,这就是方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 google test 将类型名和字符串传递给参数化测试 的相关文章

随机推荐

  • 替换嵌套数组中的对象

    我有一个数组 其中存储了另一个代理数组 在此代理数组中 仅包含每个代理的 id 使用 ID 我获取每个代理所需的数据 并且我想用新的完整代理数据替换原始代理数组 或者至少将新数据推送给特定代理 这是我到目前为止所尝试过的 有简单的方法吗 如
  • .net C#,保护每种方法的最佳实践是什么?

    我有一个 Web 项目 其中有一个处理一些数据操作的业务层 我想通过检查是否存在活动的未结束有效来保护某些或所有方法Session在执行该方法之前 我首先想到使用Attribute上课了 但我无法正确运行它 由于该类是一个普通类并且不是派生
  • 具有相同底层类型和相同扩展方法的顶级不透明类型

    我在定义具有相同底层类型和扩展方法的不透明类型时遇到了一个问题 例如 opaque type HandleA Int object HandleA def apply value Int HandleA value extension ha
  • jmockit 和 robolectric 可以共存吗?

    我正在尝试使用 Robolectric 来替换 android jar 中的存根方法来实现单元测试 同时还使用 jMockit 来模拟 Android 类 在我的例子中为 Fragment 但是 我似乎无法让它发挥作用 如果我用注释测试类
  • Magento - 如何查询管理员的角色名称?

    我正在尝试获取当前登录管理员的角色名称 我可以获得管理员用户 但我不知道如何查询他们的角色名称 Magento 文档很弱 usr Mage getSingleton admin session gt getUser 有人有想法吗 说得太早了
  • 具有扩展选择参数的 Jenkins 声明式管道

    我尝试使用 Jenkins 实现我的第一个声明式管道 以便能够将作业的参数定义也放在 SCM 下 我想转移具有扩展选择参数的现有作业 不幸的是 我无法将其添加到脚本的parameters 部分 在插件页面上 https wiki jenki
  • 在 HTTP 响应标头中使用内容处置

    我发现以下 asp net 代码在从数据库提供文件时非常有用 Response AppendHeader content disposition attachment filename fileName 这允许用户将文件保存到他们的计算机
  • Android 通过 ID 获取联系人组

    我有联系人 ID 如何获取联系人所属的组 我确信这与 Contacts Groups 类有关 但我无法弄清楚 In GroupMembership PERSON ID你有这个人的 ID 并且在同一张表中GroupMembership GRO
  • 如何在 .ascx 页面中使用 javascript

    如何在 ascx 页面中使用 javascript 您可以将脚本标签添加到标记中 Or use 脚本管理器 http msdn microsoft com en us library system web ui scriptmanager
  • 如何在链接期间替换pthread_create

    我想维护所有正在运行的线程的列表 以及有关每个线程的一些附加信息 在这个answer https stackoverflow com a 3476240 4676150提到可以提供我自己的 pthread create 版本并将程序与其链接
  • 将迷你图添加到表中

    我试图将所有数据处理转移到 Rmarkdown 而不是 SPSS Excel 但不知道如何创建带有附加图表的表格 在 Excel 中 这可以通过 Sparklines 功能来完成 或者像我一样 只需创建一个图表并非常准确地放置它 上表是使用
  • 如何使用 JS/nightwatchjs 并行运行多个测试?

    我可以通过 Nightwatch 并行执行多个测试用例吗 可能吗 我正在寻找 java 中线程能力的能力以并行测试用例执行 另外 你们对于从 Selenium 迁移到 Nightwatch 有何看法 您可以看到并行性的线程 守夜人 http
  • Spring 3 bean实例化顺序

    是否有指定 bean 实例化的顺序 即我希望特定的 bean 在其他 bean 之前实例化 就像启动顺序一样 我正在使用 Spring 3 2 和基于注释的声明方法 If bean A取决于豆子B通过定义
  • 在 R 的数据框中查找相似的行(不重复)

    我有一个超过 800k 行的数据集 示例 id fieldA fieldB codeA codeB 120 Similar one addrs example1 929292 0006 3490 Similar oh addrs examp
  • EF Core 在每次迁移时更新种子数据而不进行更改

    所以我看到我的数据库有这样的用户和角色 public static void SeedUsers this ModelBuilder modelBuilder var roles new new Role Id new Guid 51275
  • IQueryable C# 选择

    这是我的代码 但我需要仅选择要在我的 Datagridview 中显示的列 我需要代码来仅选择某些列 示例 Select t gt t usu Login t gt t usu Login public List
  • github http 克隆返回“您在服务器上运行 git update-server-info 了吗”

    我正在尝试在 Windows 上克隆一个 github 项目 我在防火墙后面 所以无法使用 ssh 跑步 git clone https github com user project git 正在返回https github com us
  • Pandas 数据框将唯一值转换为列名

    我有以下格式的 pandas 数据框 input df gw mac mac val status 0 AC233FC01403 AC233F264A4C 21 Outwards 1 AC233FC015F6 AC233F264A4C 37
  • AngularJs 路由链接中没有主题标签?

    我最近开始学习 AngularJs 进行 Web 开发 到目前为止我很喜欢它 但是 我不太确定在视图之间路由时是否在链接中包含主题标签 我主要关心的是 Google 如何缓存网站上的页面以及链接是否双向工作 即用户是否可以直接单击 www
  • 使用 google test 将类型名和字符串传递给参数化测试

    有没有一种方法可以使用谷歌的测试将类型和字符串传递给参数化测试 我想要做 template