8

我想添加虚拟对象以在项目中进行测试,但我不希望它们包含在我的最终构建中。所以我有我的AppDelegate课和进口:

#ifdef TESTING
#import "DummyBeaconLocationManager.h"
#else
#import "BeaconLocationManager.h"
#endif

然后:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
...
#ifdef TESTING
    [[DummyBeaconLocationManager sharedInstance] startRanging];
#else
    self.beaconLocationManager = [BeaconLocationManager sharedInstance];
    [self.beaconLocationManager startRanging];
#endif
    return YES;
}

但问题是我必须将它包含在我的Target Membership,而不是我的测试目标中。有没有办法不将这些文件包含在我的主要目标中,而只包含在Test目标中?

编辑:需要做的是在启动后测试我的应用程序。我想在模拟器上测试它,但应用程序使用信标。所以我创建了代表信标和模拟位置管理器的虚拟对象。当应用程序以 TESTING 选项启动时,它不会开始测距信标,而是将虚拟对象作为信标。

4

3 回答 3

7

按照这些步骤操作后,您将能够将具有测试功能的测试类添加到您的构建中。要使用测试功能运行您的应用程序,您应该选择下面配置的测试方案。

Xcode 项目配置(使用 Xcode 7.0.1)

为了使条件导入和功能对测试有效,您将需要以下成分:

  1. 测试配置
  2. 测试目标
  3. 测试方案

方案、目标和构建配置的简短说明

  • 方案指向目标和配置。
  • 可以使用不同的构建设置来配置目标。
  • 可以添加配置,以扩展目标构建设置。

以下是步骤:

1.复制配置进行测试

在项目导航器中选择项目文件后,执行以下步骤:

  1. 选择项目目标
  2. 选择信息
  3. 选择 + 以添加配置

复制项目配置

  1. 选择重复的“调试”配置 复制

  2. 重命名新配置,然后拖动以重新排序 重命名项目配置并拖动以重新排序

2. 复制目标进行测试

现在您有了一个测试配置,添加一个测试目标。在项目导航器中选择项目文件,按照以下步骤操作:

  1. 右键单击或按住 Option 键单击现有目标,然后选择复制。 复制现有目标

  2. 点击新目标将其重命名,然后将其拖动以重新排列目标。 重命名并拖动新目标

3. 管理方案

现在您已经有了一个测试目标和配置,您可以添加一个指向新目标和配置的方案。

  1. 点击方案(在停止按钮旁边),然后选择管理方案... 选择管理方案...

  2. 在方案管理器弹出窗口中,如果您选择自动创建方案,则新方案将已列出。否则,您可以在弹出窗口中点击 + 以添加方案。每个方案都可以共享,如下所示: 配置新方案

  3. 点击新方案以重命名它,然后将其拖动以重新排序: 重命名和重新排序方案

  4. 要编辑新方案,请确保选中它,然后点击编辑... 编辑方案

  5. 在编辑面板中,选择测试构建配置 选择测试构建配置

  6. 通过点击 Executable 下拉菜单,确保方案指向测试目标: 指向运行操作的测试目标

  7. 确保方案指向正确的构建配置,以进行其他操作,例如自动化测试: 指向测试目标的测试动作

4. 为您的目标配置构建设置

现在您已将测试方案设置为指向测试配置,它的行为将与调试配置完全相同,直到您修改构建设置。按照以下步骤更改测试配置的构建设置:

  1. 对于大多数构建设置,每个配置都有一个选项。选择要在设置中使用的配置时,请确保选择了主要目标: 选择主要目标

  2. 预处理器宏位于标题为“Apple LLVM 7.0 - 预处理”的部分下: 预处理器宏

  3. 点击一行,将其选中,点击回车键编辑并提交您的更改,使用箭头键向上或向下移动。为所有配置定义所有预处理器宏是一个很好的做法,如下所示: 定义预处理器宏

5. 为您的测试目标添加一个类

现在,测试方案指向一个行为与您的调试配置不同的配置。您现在应该能够从方案下拉菜单中选择测试方案,并运行您的测试配置。

您可以通过以下两种方式之一修改类的目标成员资格。

  1. 创建新文件时,您可以选择位置的第三个面板在底部为每个目标提供选项:

选择目标会员

  1. 当您在 Project Navigator 中选择一个文件时,File Inspector 有一个 Target Membership 面板,您可以在其中进行修改: 修改目标成员

计划

方案通常配对以构建配置。一种好的做法是为需要不同版本构建的每个受众制定方案/配置。以下是一些通常需要单独配置的基本受众:

  • 开发人员 > 调试
  • 开发人员 > 测试
  • 内部测试 > 开发
  • Beta 测试人员/生产 > APP STORE

子类化

如果您想在测试模式下修改任何功能,您可以使用子类,并且只将子类添加到您的测试目标中。

于 2015-10-06T23:50:16.563 回答
0

好吧,如果我没看错,你应该:

  • a) 创建一个单独的目标来测试 porposes(正如@Carl Veazey 和@Rainer Schwarze 建议的那样),其代码库与您的主要目标几乎相同。
  • b)我建议
    通过 BeaconLocationManager 和 YourBeacon 的子类化来模拟您的位置管理器和信标对象
    (例如)。然后,您只需使用
    特定于模拟器的操作覆盖实际行为。

归根结底,与主要目标相比,您的测试目标将仅包含 2 个以上的类(模拟信标管理器和模拟信标)。不需要对项目结构或代码语义进行额外更改。祝你好运。

于 2015-10-03T08:20:41.573 回答
0

我可能很容易对此有所不同,但我猜这可能会奏效:

就像使用 cocoapods 时一样,当您创建 pod 文件时,您取消选择目标(项目名称)。如果你这样做,然后选择目标(项目名称测试)

在此处输入图像描述

于 2015-10-08T13:19:17.357 回答