如何在 Xcode 4.5“命令行工具”项目中设置工作逻辑单元测试目标?

2023-12-26

无法为特定场景设置单元测试。这就是我正在尝试的:

  • 在 Xcode 4.5 中,我创建了一个简单的 OSX“命令行工具”应用项目(基金会)。
    请注意,Xcodedoes not提供自动将单元测试添加到“命令行工具”项目的选项 - 所以请不要建议勾选复选框;它不在那里:-/

  • 在我的项目中,我创建了一个简单的示例类,我想测试它;例如“形状”。

  • 我按照苹果的说明进行操作Xcode 单元测试指南 for 在项目中设置单元测试 http://developer.apple.com/library/mac/#documentation/developertools/Conceptual/UnitTesting/02-Setting_Up_Unit_Tests_in_a_Project/setting_up.html:

    • 我向我的项目添加了一个单元测试目标,并且

    • 我编辑了“测试”方案以在新目标中运行测试。

  • 在测试项目的实现 (.m) 文件中,我添加了一个导入Shape.h和代码在setUp()方法实例化形状并将其分配给实例变量。

那时,我决定看看事情是否会构建以及默认测试是否仍然会运行。然而当我选择产品...测试从菜单中,构建失败并出现以下错误:

Undefined symbols for architecture x86_64:
  "_OBJC_CLASS_$_Shape", referenced from:
      objc-class-ref in ExampleTests.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

解释这个错误不是问题。我发现单元测试目标没有链接到包含 Shape 实现的二进制文件。但是,我(还)没有理解 Xcode 单元测试和目标配置。所以:

为了让测试目标链接到命令行工具的结果输出,我需要做什么?我可以从单元测试目标链接到命令行可执行文件吗? Apple 的文档看起来特定于常规 OSX 应用程序(*.app)和 iOS 应用程序,而这两者都不是。

我有业务逻辑类,我想在命令行工具设置中开发(首先),所以我想了解我需要做什么才能让单元测试目标在“命令行工具”中运行” 项目类型。谢谢你!

(注:请注意,我是not有兴趣运行我的单元测试from命令行 – Stack Overflow 已经提出了关于如何做到这一点的“类似”问题 – 而是运行单元测试on“命令行工具”类型project,并且仍然是在 Xcode 中。)


我已经确定了一个我认为合适的解决方法,除了添加目标之外,它似乎没有明显的缺点。

简而言之:解决方案包括添加静态库目标利用 Xcode 围绕此类目标创建和运行单元测试代码的能力。然后,命令行工具目标委托给静态库,其中有一个备用工具main()类函数由实数定义和调用main()入口点。命令行工具不含重要代码,因此单元测试目标可以访问所有值得测试的内容。

步骤如下:

  • 在空的 Xcode 中,从菜单中选择文件...新项目.

  • 在出现的对话框中,选择OS X...应用程序...命令行工具。出于本示例的目的,我假设它被命名为示例命令.

创建基本命令行工具项目后:

  • 从菜单中选择文件...新建...目标.

  • 在出现的对话框中,选择OS X...框架和库...Cocoa 库。出于本示例的目的,我假设它被命名为示例命令逻辑.

  • 选择类型Static,因此命令行工具将仍然是独立的可执行文件。

  • 确保包括单元测试框被选中。

创建静态库项目后:

  • 复制main()函数来自main.m to SampleCmdLogic.m,替换@implementation堵塞。 (此文件仅保存主入口点。可以为 Objective-C 类等添加其他文件。)Rename该函数为libMain().

  • In SampleCmdLogic.h,添加新的声明libMain(),替换@interface block:
    int libMain(int argc, const char * argv[]);

  • 在命令行工具中main.m,添加一个#import "SampleCmdLogic.h" at top.

  • 在命令行工具中main.m,改变真实的全部内容main()函数:
    return libMain(argc, argv);

代码现已准备就绪,但需要执行链接步骤:

  • 在项目设置中SampleCmd, under 构建阶段, 扩张目标依赖关系并添加 (+) SampleCmdLogic 作为依赖项。

  • 在项目设置中SampleCmd, under 构建阶段, 扩张将二进制文件与库链接并添加 (+)libSampleCmdLogic.a

现在一切都准备好了。当您更改为 SampleCmd 目标并选择产品..运行从菜单中,构建应该成功并按预期生成输出。当您更改为 SampleCmdLogic 目标并选择产品...测试从菜单中,构建应该成功并且单元测试将运行。报告的单个问题将是 Xcode 插入的初始默认失败单元测试断言,在SampleCmdLogicTests.m。这是预料之中的。

从现在开始,继续将所有逻辑和相应的测试添加到 SampleCmdLogic 目标中。 SampleCmd 目标保持简单,仅提供命令行工具入口点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Xcode 4.5“命令行工具”项目中设置工作逻辑单元测试目标? 的相关文章

  • 模拟一个接口 { get;仅(最小起订量)

    我有一个IUnitOfWork包含到我们所有存储库的映射的接口 如下所示 public interface IUnitOfWork IDisposable IRepository
  • Swift 语言中的 #ifdef 替换

    在 C C Objective C 中 您可以使用编译器预处理器定义宏 此外 您可以使用编译器预处理器包含 排除代码的某些部分 ifdef DEBUG Debug only code endif Swift 中有类似的解决方案吗 是的 你可
  • Python unittest - 使用列表断言字典

    在为我的班级编写一些测试时 我遇到了有趣的简单问题 我想断言两个字典包含一些列表 但是这个列表可能不会以相同的方式排序 gt 这会导致测试失败 Example def test myobject export into dictionary
  • Xcode11 编辑器(通过“将编辑器添加到右侧”)被禁用

    自从我升级到以来它一直在工作Xcode11 2 几天前注意到了它 现在它不允许我向布局添加编辑器 如同Xcode 11 中引入的编辑器更改 https www avanderlee com xcode xcode assistant edi
  • Mac OSX 10.7.4,Xcode 4.4.1,没有 头文件?

    我正在编写一个程序 它将使用 C 标准库的数组容器来保存一些对象 但是 每当我尝试在程序中包含以下代码行时 include
  • 使用 std::function w/ std::bind 时的 EXC_BAD_ACCESS

    升级到 XCode 5 后 使用 std function 和 std bind 似乎会生成 EXC BAD ACCESS 异常 看起来好像 std function 实现中的 base 指针最终为空 导致访问错误 但我不清楚为什么会出现这
  • 如何安全地重命名 iOS 分发配置文件?

    我几个小时前刚刚提交了我的第一个应用程序 现在处于 等待审核 状态 但我犯了一个错误 我已经命名了我的分配配置文件My Company Distribution Profile 我应该做的事情被命名为我的发行版配置文件My GAME Dis
  • 带有自定义字体的 UILabel 错误呈现

    在我的 iPhone 应用程序中 我为所有 UILabel 设置了自定义字体 更准确地说 我对 UILabel 进行了子类化 重写了一个方法 在该方法中设置了自定义字体 然后将 IB 中的所有标签设置为该自定义类 现在的问题是 所有文本都渲
  • TestFlight 安装的应用程序因 Swift 包管理器依赖项而崩溃

    我们已经迁移了一些 CocoaPod 依赖项 以便在 Xcode 11 中使用 Swift Package Manager 进行构建和链接 但是 每当我们将应用程序提交到 AppStore Connect 并使用 TestFlight 进行
  • 如何在 Swift 中退出“DispatchQueue.main.asyncAfter”

    我想在调用 deinit 时退出 DispatchQueue main asyncAfter 子视图 swift DispatchQueue main asyncAfter deadline now 5 0 self doSomething
  • 切换到 Xcode 7 后,应用程序大小从 9 MB 增长到 60 MB,有解决办法吗?

    我一直在回顾 Git 历史来寻找文件大小发生巨大变化的原因 但我能找到的唯一真正原因是从 Xcode 6 切换到 Xcode 7 GM 我发现这些是文件大小贡献最大的 10 个 ipa创建自Archive操作在一个Release构建配置 u
  • 如何对 iPad 应用程序进行类转储?

    我正在尝试运行 iPad 应用程序的类转储来探索其架构 我使用 The Unarchiver 提取了 ipa 文件 并从 Payload 文件夹中对 app 文件运行了 class dump 但是 我收到此错误 Generated by c
  • 模拟 DBSet,EF 模型优先

    正如标题所说 我遵循模型优先方法 所以我的模型类是自动生成的 如果我想嘲笑DBContext衍生的MyModelContainer其中包含DBSets实体类 阅读一些内容 为了进行单元测试 您需要将其更改为IDBSet 是否可以做到这一点
  • Spring boot:单元测试和配置文件

    我正在对休息控制器进行单元测试 这只是更大应用程序的一小部分 我的应用程序无法识别我的测试上下文 并且出现以下异常 java lang IllegalStateException 无法加载ApplicationContext 这是我的测试课
  • AngularJS 和 PouchDB 服务的单元测试

    我正在尝试对我的个人 Angular 工厂进行单元测试 但很难尝试正确模拟和注入 PouchDB 对象 我的工厂代码目前如下 factory Track function var db new PouchDB tracks var reso
  • Maven 未运行 Spring Boot 测试

    我有一个要测试的 Spring Boot REST API 我可以在 Eclipse 中手动运行测试 无需 Maven 并通过将应用程序作为 JUnit 测试运行 它运行良好并显示结果 但是mvn test正如您将在下面发现的那样 它不起作
  • 模拟类:Mock() 还是 patch()?

    我在用mock http www voidspace org uk python mock index html使用Python 想知道这两种方法中哪一种更好 阅读 更Pythonic 方法一 只需创建一个模拟对象并使用它 代码如下 def
  • 如何避免从模拟对象列表返回模拟

    我正在尝试模拟 责任驱动的设计 在对象需要服务来检索其他对象的情况下 我似乎无法避免从模拟返回模拟 一个例子是检查上个月的账单是否已支付的对象 它需要一个检索账单列表的服务 所以我需要在测试中模拟 billRetrievalService
  • 如何添加授权以从新钥匙串对应用程序进行代码签名,而无需任何人工交互

    我正在尝试使用特定证书自动化构建 iPhone 应用程序的过程 因此 想象一下 如果不同的用户将他们的证书上传到系统中 并且可以立即用于代码签名 我想在没有任何交互的情况下做到这一点 我也不想用不同的用户证书弄乱系统或登录钥匙串 为此我有
  • 如何在android sdk上使用PowerMock

    我想为我的 android 项目编写一些单元测试和仪器测试 然而 我遇到了一个困扰我一段时间的问题 我需要模拟静态方法并伪造返回值来测试项目 经过一些论坛的调查 唯一的方法是使用PowerMock来模拟静态方法 这是我的 gradle 的一

随机推荐

  • Android 问答游戏 - 每个问题的倒计时器

    我使用此处的教程创建了一个适用于 Android 的测验应用程序 http automateddeveloper blogspot co uk 2011 06 getting started complete android app htm
  • 如何停止 html 属性中 onclick 事件的事件传播?

    我有一个带有 onclick 属性的 html 元素 我需要防止该事件冒泡 我尝试这样做 div 和这个 div 但两者都不起作用 我绝对需要在 html onclick 属性中执行此操作 因为此 div 是 Razor 部分视图的一部分
  • 如何在 Mac 10.7 上的 virtualenv 中安装 MatPlotLib

    这是我尝试做的 SAASSenv miki725mac SAASSenv miki725 python Python 2 7 2 v2 7 2 8527427914a2 Jun 11 2011 15 22 34 GCC 4 2 1 Appl
  • c 编程难题

    给定一个所有元素均为正数的数组 求子序列的最大和 约束条件是序列中的 2 个数字不应在数组中相邻 因此 3 2 7 10 应返回 13 3 和 10 之和 或 3 2 5 10 7 应返回 15 3 5 和 7 之和 我尝试使用所有可能允许
  • NPM 搜索:内存不足

    在 ubuntu 14 10 3 13 0 76 generic 120 Ubuntu SMP Mon Jan 18 15 59 10 UTC 2016 x86 64 x86 64 x86 64 GNU Linux 上 当我这样做时 sud
  • 实现 AsyncTask 的技巧

    大家好 我有一个应用程序 可以在位图上放置一个圆圈 并使用滑动条更改圆圈内像素的 RGB 值 我想使用 asynctask 来加速更改像素的过程 我不知道从哪里开始 我在活动文件底部注释掉了一些代码 因为这是我第一次尝试 谁能指出我如何实现
  • 使用 OpenCV 进行头部(和肩部)检测

    如果我问了一个太新手的问题 请提前道歉 我是 OpenCV 的初学者 我已经完成了一些教程 但我还没有很好地掌握它的概念 问题 如何使用 OpenCV 进行头部检测 不是面部检测 例如在公共汽车或房间内的照片中 注意 我不想做人脸检测 只需
  • 如何使用 firestore 的安全规则验证数组值?

    我有一个创建以下 JSON 结构的表单 reviewed false title Just a title user UYV9TRKXfNW1NeCyFyfjZfagJ8B items age 33 experience Newcomer
  • 在 Laravel Blade 中检索外部 api 的数据

    public function RetrieveStatus response Http get https exemple exemple com fr api
  • 在这种情况下,一般异常处理不是那么糟糕吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在下面的代码中 我尝试发送一组通知 我想知道通知是否已成功发送 稍后将其放入数据库中 这样就不再发送它 我抓到了是不是很糟糕Exception这
  • Django - 检查用户是否对每个网址进行了身份验证

    在我的 html 上 我可以使用以下语法检查用户是否已登录 if user is authenticated div div else p Please Log in p endif 但是 如果我想检查我正在渲染的每个 html 文件的用户
  • “调用/应用”和“绑定”之间有什么区别[重复]

    这个问题在这里已经有答案了 var obj x 81 getX function console log this x var getX obj getX bind obj use obj as this getX 81 var getX
  • HttpDelete 中的 setEntity

    HttpDelete 是否包含 setEntity 等方法 如 HttpPost 或 HttpPut 当我使用 HttpPost 时 我会做这样的事情 httppost setEntity new UrlEncodedFormEntity
  • Rails 3 序列化问题

    我有一个在 ror 2 3 x 上运行良好的应用程序 我在升级到 Rails 3 时遇到序列化问题 代码看起来像这样 class PaymentTransaction lt ActiveRecord Base serialize respo
  • Spring Boot Actuator - 多个健康端点

    有没有办法在 Spring Boot 应用程序上支持多个健康端点 原因如下 标准执行器运行状况检查很棒 内置检查很棒 自定义选项很棒 对于单个用例 报告一般应用程序运行状况 但我想要可以从 AWS Elastic Load Balancer
  • 如何在 iPhone/Mac 上使用 CoreAudio 合成声音

    我想在 iPhone 中播放合成声音 我不想使用预先录制的声音并使用 SystemSoundID 来播放现有的二进制文件 而是对其进行合成 部分原因是我希望能够连续播放声音 例如 当用户的手指位于屏幕上时 而不是一次性的声音样本 如果我想合
  • PyMongo 的批量写入操作功能与生成器

    我想使用 PyMongo 的bulk http api mongodb org python current examples bulk html执行写操作的写操作功能 分批进行 以减少网络往返次数并提高吞吐量 我还发现here http
  • SQL 2008 - INFORMATION_SCHEMA 视图中的外键约束

    我正在编写一个 C 单元测试 用于根据目标数据库 始终是 SQL 2008 以及数据映射到的类来验证 ORM 类的字符串属性 检查指定的外键在数据库中是否有效很容易 static private bool ConstraintExsits
  • 指向非静态成员函数的指针“正式”不被视为指针

    我碰到this https stackoverflow com a 71870413 12002570其中指出 成员函数指针不是指针 指向非成员函数 包括静态成员函数 的指针是指针 上面的引用似乎表明指向非静态成员函数的指针不是指针 同样
  • 如何在 Xcode 4.5“命令行工具”项目中设置工作逻辑单元测试目标?

    无法为特定场景设置单元测试 这就是我正在尝试的 在 Xcode 4 5 中 我创建了一个简单的 OSX 命令行工具 应用项目 基金会 请注意 Xcodedoes not提供自动将单元测试添加到 命令行工具 项目的选项 所以请不要建议勾选复选