如何在C ++中使用#ifdef在生产代码中编写仅测试的代码?

问题描述

注意:我认为这是非常基本的,如果已经回答了,请指出正确的方向。我确实看过网上,但出乎意料的是找不到答案,我可能使用错误的单词进行搜索

我认为我应该可以通过在项目属性中定义预处理器指令来做到这一点,但我认为我缺少一些基本知识。

这就是我要完成的事情-说我有一些类似以下代码代码可以交付生产:

//In Foo.hpp
class Foo
{
   public:
      Foo()
      ~Foo()
      ...
}

//In Foo.cpp
Foo::Foo()
{
   #ifdef THIS_IS_TEST_MODE
      Bartest();
   #else
      Bar();
   #elseif
}

目标:在Foo()的构造函数中,我希望BarTest()仅在测试代码中实例化Foo时运行。

上下文:我正在使用BOOST,因此我基本上在测试代码中使用BOOST_AUTO_TEST_SUITE和BOOST_FIXTURE_TEST_CASE宏。当前所有prod和test项目文件中都包含一个.props文件

我已经尝试过的操作添加了另一个带有预处理器指令TEST的.props文件,并且该.props文件仅包含在测试项目中。尽管#ifdef TEST在测试项目中评估为true,但在生产代码中评估为false。我认为这是因为新的.props配置仅适用于测试项目。

替代方法:我想我可以在Foo的ctor中添加一个参数,例如bool test并将其认设置为false,因此仅在测试代码中为true。但是,我认为将来可能会导致错误

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)