Xcode: 用于条件性DEBUG / TEST代码的预处理宏

11

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

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

当你在创建新项目时选择“添加单元测试”时,Xcode会设置目标。

在项目文件中,我已经为MyAppTests构建目标添加了CONFIGURATION_TESTS标志到预处理器宏,但没有添加到MyApp目标。

这是我在许多帖子中找到的建议方式。

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

在单元测试文件中,这个宏被定义并按预期工作(因为测试文件只由MyAppTests目标构建?)

有人知道如何解决这个问题吗?我认为这应该是一个常见的问题...


1
我也遇到了同样的问题,但是无法解决。 - shawnwall
这个不起作用:1)CONFIGURATION_TEST 总是为真?2)从不为真?3)在单元测试中有效但在应用程序中无效?4)在应用程序中有效但在单元测试中无效?(好奇的人想知道...) - geowar
2个回答

12
我终于找到了答案:关键是创建一个新的构建配置(我们称之为Testing配置)。
然后,您相应地配置预处理器宏的值,因此对于Debug和Release配置,您设置CONFIGURATION_TESTS = 0,对于Testing配置,您设置CONFIGURATION_TESTS = 1。
最后,您编辑单元测试模式以使用Testing作为构建配置。就这样:P
我在我的博客上写了详细的分步说明。

愚蠢的问题:为什么非测试构建配置需要CONFIGURATION_TESTS=0?我忽略了这部分,一切似乎都正常工作了。 - Chris Gillum

3

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接