【问题标题】:Is there a way to not compile unit test function body in release build without using #ifdef?有没有办法在不使用#ifdef 的情况下在发布版本中编译单元测试函数体?
【发布时间】:2020-01-31 11:09:23
【问题描述】:

假设我们有许多仅用于调试构建的单元测试功能。我们根本不想在发布版本中编译这些函数。除了每次都用#ifdef _DEBUG 包装单元测试函数之外,还有其他方法吗?

#ifdef _DEBUG
void testfunc_xxx() {
  ...
}
#endif

例如,我们可以有一个宏

#ifdef _DEBUG
#define UNITTESTFUNC(name) void name()
#else
#define UNITTESTFUNC(name) template<typename T> void name()
#endif

UNITTESTFUNC(testfunc_xxx) {
  ...
}

但这取决于延迟的模板解析。有更好的方法吗?谢谢!

【问题讨论】:

  • 为什么要用复杂的宏代替简单的宏? ifndef 有什么问题?
  • 为什么还要在发布版本中链接单元测试功能?只需省略该版本中的那些目标文件。更好的是,将应用程序的主要部分构建为一个库,它可以链接到各种测试程序和可发布的产品中。
  • 使用您的构建系统选择文件进行调试/发布/两者。

标签: c++ c++11 c-preprocessor


【解决方案1】:

还有另一种思想流派将生产代码与所有单元测试代码分开,将每个代码保存在自己的库中。

然后可以将单元测试代码构建到自己的应用程序中,将生产代码作为库调用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-20
    • 1970-01-01
    • 2021-06-17
    • 2011-01-06
    • 1970-01-01
    • 2023-01-09
    • 2011-10-02
    • 1970-01-01
    相关资源
    最近更新 更多