有没有办法在不使用 #ifdef 的情况下不编译发布版本中的单元测试函数体?

Is there a way to not compile unit test function body in release build without using #ifdef?

本文关键字:版本 函数体 单元测试 布版本 编译 有没有 情况下 #ifdef      更新时间:2023-10-16

假设我们有许多单元测试函数仅用于调试构建。我们根本不想在发布版本中编译这些函数。除了每次都用 #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) {
...
}

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

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

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