首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何运行和调试iPhone应用程序的单元测试?

如何运行和调试iPhone应用程序的单元测试?
EN

Stack Overflow用户
提问于 2018-04-16 06:11:03
回答 2查看 0关注 0票数 0

本教程与Xcode版本5及以上版本无关。

设置包含单元测试的目标,但不运行它们

  1. 安装可执行文件以运行测试
  2. 设置最简单的环境变量,以便otest可以找到你的单元测试

以下是使用XCode 3.2.5进行的

注意XCode 4

在XCode 4中,可以直接调试你的单元测试。只需编写测试,将其作为测试之一添加到目标中,并在其中设置断点。

第1步 - 设置目标

  1. 复制项目目标下的单元测试目标。这也将创建单元测试产品(.octest文件)的副本。在下图中,“LogicTest”是原始目标。
  2. 将单元测试目标和单元测试产品(.octest文件)重命名为相同的名称。在下图中“LogicTestsDebug”是重复的目标。
  3. 删除新目标的RunScript阶段

两者的名称可以是任何东西,但我会避免空格。

在这里输入图像描述
在这里输入图像描述

第2步 - 设置otest

这里最重要的一点是要获得正确的答案,即适用于当前的iOS版本,而不是默认的Mac版本。以下是一些帮助我设置正确的更多细节:

  1. 转到项目 - >新的自定义可执行文件。这将弹出一个窗口,提示输入一个可执行文件名称和一个可执行文件路径。
  2. 输入你想要的名字。
  3. 将路径复制粘贴到iOS otest可执行文件。在我的情况下,这是/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.2.sdk/Developer/usr/bin/测试
  4. 按回车。带到可执行文件的配置页面。
  5. 现在唯一要改变的是选择“路径类型:相对于当前的SDK”。不要输入路径,这是在第3步完成的。
在这里输入图像描述
在这里输入图像描述

第3步 - 设置最简参数和环境变量

最简单的论据很容易设置...但这被证明是我最大的问题。我最初命名了我的逻辑测试目标“LogicTests调试”。有了这个名字和“LogicTests Debug.octest”(带引号)作为参数,我保持终止退出代码1,永远不会停止进入我的代码...

解决方案:目标名称中没有空格!

otest的论据是:

  1. -SenTest Self(或全部或测试名称 - 在终端中输入人名以获取列表)
  2. {LogicTestsDebug} .octest - 其中{LogicTestsDebug}需要被逻辑测试包名称替换。

以下是复制/粘贴的环境变量列表:

  • DYLD_ROOT_PATH:$ SDKROOT
  • DYLD_FRAMEWORK_PATH:“$ {BUILD_PRODUCTS_DIR}:$ {SDK_ROOT}:$ {DYLD_FRAMEWORK_PATH}”
  • IPHONE_SIMULATOR_ROOT:$ SDKROOT
  • CFFIXED_USER_HOME:“$ {HOME} /库/应用程序支持/ iPhone模拟器/用户”
  • DYLD_LIBRARY_PATH:$ {BUILD_PRODUCTS_DIR}:$ {DYLD_LIBRARY_PATH}
  • DYLD_NEW_LOCAL_SHARED_REGIONS:是
  • DYLD_NO_FIX_PREBINDING:YES

请注意,我也尝试了DYLD_FORCE_FLAT_NAMESPACE,但这只是简单的崩溃。

在这里输入图像描述
在这里输入图像描述

第4步 - 运行你的可执行文件

要运行你的可执行文件并开始调试你的测试,你需要:

  1. 将你的主动目标设置为你的单元测试目标(我的情况是LogicTestsDebug)
  2. 将活动可执行文件设置为可执行文件

可以构建并运行可执行文件并使用断点调试测试。

作为附注,如果在运行可执行文件时遇到问题,它可能与以下内容有关:

  1. 路径错误。最初我遇到了很多问题,因为我指的是宏观测试。我在终止代码6发布时一直崩溃。
  2. 参数错误。在我从bundle(.octest)名称中删除空间之前,我一直使用退出代码1进行崩溃。
  3. 环境变量中的错误路径。我现在的套装似乎已经开始工作了,所以我建议你从此开始。

可能会在控制台中收到一些消息,这可能会导致认为环境变量出现问题。可能会注意到有关CFPreferences的消息。此消息并不妨碍测试正常运行,因此如果在运行测试时遇到问题,请不要关注它。

在这里输入图像描述
在这里输入图像描述

上次一切正常后,将能够在测试中的断点处停下来。

在这里输入图像描述
在这里输入图像描述

最后一件事

我在很多博客上看到,集成XCode SenTestKit的主要限制是在构建应用程序时无法运行测试。事实证明,这实际上很容易管理。只需将逻辑测试包作为依赖添加到您的应用程序项目中即可。这将确保逻辑测试包已经构建好,即所有测试都在应用程序构建之前运行。

为此,可以将逻辑测试包拖放到应用程序目标上。

在这里输入图像描述
在这里输入图像描述
EN

回答 2

Stack Overflow用户

发布于 2018-04-16 14:50:22

我目前正在用CoreData编写应用程序,并从Web服务(xml解析)中检索数据。完整的模型可以进行测试和调试,而无需:

  1. 在模拟器或设备上运行实际的应用程序。不必使用设备来运行测试是一个巨大的时间。这是每次运行2分钟和5秒之差。
  2. 而无需在测试模型时创建视图或控制器。完整的开发和测试只能在第一次迭代时专注于模型。一旦该模型被整合,其余的开发可以遵循。

为了调试xml解析,我可以简单地使用我完全控制的“硬编码”文件。

关键是当在代码中实现特性时编写测试。就整个应用程序的调试而言,它确实节省了时间。

票数 0
EN

Stack Overflow用户

发布于 2018-04-16 15:23:43

我能够通过以下几个简单步骤在调试器中运行测试用例:

  1. 产品>构建用于>测试
  2. 在想要调试的部分测试中放置一个断点
  3. 产品>测试

这是在Xcode 6.0.1上,似乎比上面描述的长程序更方便。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100004416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档