【问题标题】:GoogleTest force #undef on particular testGoogleTest 在特定测试上强制 #undef
【发布时间】:2023-03-23 08:55:01
【问题描述】:

我使用 GoogleTest,我想测试一些带有 #ifndef 的函数。

文件交流

bool myFunction() {
#ifndef FOO
   return true;
#else   
   return false;
#endif
}

是否可以在特定测试期间强制使用#undef?像这样我可以在 2 个统计数据中测试函数(有定义和没有定义)。

【问题讨论】:

  • 我认为您的问题是,是否可以在 Google 测试期间重新编译源文件,我认为不会。
  • 因为你可以用MOCK替换test里面的一些函数,我希望也有一些东西可以定义
  • 问题是FOO是一个预处理器符号。它是否被定义......是一个仅在代码编译期间才有意义的问题。所以,为了得到你想要的,我们需要一种机制,谷歌测试将通过这个机制编译你的测试的两个版本,一个有定义,一个没有。我不确定是否存在这样的实用程序。

标签: c embedded googletest


【解决方案1】:

这是人们试图避免使用#define#if 等创建的函数的多个版本的原因之一。很难测试所有这些不同的版本。

如果你想测试这两个版本,你必须编译你的程序两次(一次有#define FOO,一次没有),然后分别运行测试。更改FOO 的值的唯一方法是重新编译程序。

或者,您可以重构您的代码,这样#define 就不需要了。

【讨论】:

  • 我使用很多#define,因为我在嵌入式系统上工作,我需要很多优化,预处理器是一个很好的方法。重构代码,这不是选项,我试图说服我的同事进行单元测试,如果我们必须重构代码,答案将是 NO。
  • @P.Paul-Alexandre - 所以您的公司在没有将测试纳入您的原始部署过程的情况下,制作了一个充满条件编译的代码库?哎哟
  • 没有单元测试并不意味着根本没有测试。 @DietrichEpp 编译程序两次可能是个好主意,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-04
  • 2023-01-22
  • 2012-01-23
  • 1970-01-01
相关资源
最近更新 更多