问题 Xcode:条件DEBUG / TEST代码的预处理器宏


我的代码中有一些部分(例如在AppDelegate.m中),不应该为单元测试编译,比如

#ifndef CONFIGURATION_TESTS
// Code that should not be compiled in the Unit Tests
#endif

在创建新项目时选择“添加单元测试”时,Xcode会设置目标。 在项目文件中,我已将标志CONFIGURATION_TESTS添加到MyAppTests Built-Target的预处理器宏,但不添加到MyApp目标。

这是我发现的许多帖子中的建议方式。

但这不起作用,因为(我猜)MyAppTests目标将MyApp目标作为依赖项,并且因为AppDelegate.m被添加到MyApp目标,它将使用MyApp构建设置进行编译,因此,未定义CONFIGURATION_TESTS 。

在单元测试文件中,宏被定义并按预期运行(因为测试文件仅由MyAppTests目标构建?)

有谁知道这是怎么做的,我认为这将是一个常见的问题......


13129
2018-02-21 00:16


起源

我有同样的问题,无法弄清楚 - shawnwall
“这不起作用:1)CONFIGURATION_TEST始终是真的吗?2)永远不是真的吗?3)在单元测试中工作但不在app中工作?4)在应用程序中工作但不在单元测试中工作吗?(询问思想想知道...) - geowar


答案:


我终于找到了答案:关键是要创建一个新的构建配置(让我们调用这个配置测试)

然后相应地配置预处理器宏的值,因此对于配置Debug和Release,设置CONFIGURATION_TESTS = 0,对于配置测试,设置CONFIGURATION_TESTS = 1

最后,编辑Unit-Test模式以使用Testing作为构建配置。就是这样:P

我已经在我的网上写了一个详细的逐步解释 博客


11
2017-09-03 12:23



愚蠢的问题:为什么非测试构建配置需要CONFIGURATION_TESTS = 0?我把这部分拿出来了,一切似乎都很好。 - Chris Gillum


你需要设置“CONFIGURATION_TESTS = 1”,而不仅仅是“CONFIGURATION_TESTS”


3
2018-01-10 20:41