2012-02-21 156 views
11

我有专门的章节我的代码(例如在AppDelegate.m)不应该对单元测试进行编译,就像的Xcode:为条件调试/测试代码预处理宏

#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构建目标?)

有谁知道如何做到这一点,我认为这将是一个共同的问题...

+1

写了一个详细的一步一步的解释比我有同样的问题,不能弄明白 – shawnwall 2012-05-01 21:06:57

+0

“这不工作:1)CONFIGURATION_TEST总是真实的?2)从来没有真正的?3)在单元测试但在应用程序中?4)在应用程序,但不是单元测试?(询问头脑想知道...) – geowar 2013-01-01 18:20:18

回答

11

我终于找到自己的答案:关键是要创建一个新的构建配置(让我们称之为该配置测试)

然后,相应地配置预处理器宏的值,因此对于配置调试和发布您设置CONFIGURATION_TESTS = 0并为配置测试,您设置CONFIGURATION_TESTS = 1

最后,编辑单元测试架构以使用测试作为构建组态。就是这样:P

我在我的blog

+0

愚蠢的问题:为什么你需要CONFIGURATION_TESTS = 0非测试版本配置?我把这部分留下来,一切似乎都很好。 – 2014-05-15 04:57:22

3

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