我过程中的迁移我的项目从工业化4.6.3到低5.0.2开始.该项目的单元测试的开发与SenTestingKit/OCUnit.现在,当我正在运行测试模式5,我得到一个错误 RunUnitTests 脚本本告诉我

RunUnitTests是过时的。

可能是相关的是本说明的模式5版本说明:

SenTestingKit和OCUnit被废弃。使用迁移到移动到XCTest.

不幸的是,我没有能够找到更多关于这个神秘的"迁移".可能是我谷歌-fu是缺乏[再次],所以我的主要问题是:我怎么迁移单元的测试,从SenTestingKit/OCUnit新XCTest(有或没有"迁移")?

一个次要的问题,情况下移徙是一个复杂的业务:它是可能得到低5个运行单位测试中,仍然基于SenTestingKit/OCUnit?之后所有这些都仅仅是废弃,所以它们仍然应该是约和功能。

有帮助吗?

解决方案

感谢毛茸茸的青蛙的答案,我们知道神秘的"迁移"中提到的低版本说明是一个向导,发起了通过选择"编辑">"重构">"转换为XCTest".我要写关于我的经验这种导两个部分。第一部分是不完整的答复的主要问题,第二部分的答案,辅助的问题。


第1部分:如何迁移,从OCUnit到XCTest

第一件事情你需要知道的是,为向导工作,你需要 选择一个单元测试的目标.如果你有的主要目标选择,向导根本没有列出任何目标转换。

一旦我发现了这个,我能步骤通过的向导,但在我的情况的最终结果仍然是一个壮观的失败!向导权,没有来源的更改是必要的,只有建设需要更新迁移到XCTest.在结束,导甚至没有管理做是正确的:它的 有没有 除参考SenTestingKit框架,但它没有 放在一个参考XCTest框架。

不管怎样,下面是一个列表中的变化,我不得不手工作,因为向导的失败,使他们对我来说。如果导工作更好地为你,你可能不需要做所有这些事情。

  1. 删除"运行的脚本"构建阶段,从该单元的测试的目标
  2. 改变基类的所有测试的情况类 SenTestCaseXCTestCase
  3. 改变的进口头 <SenTestingKit/SenTestingKit.h><XCTest/XCTest.h>
  4. 在测试的目标是建立设置,改变包装纸的扩展从 octestxctest.
  5. 重命名的所有主张的宏 ST*XCT* (例如 STAssertTrue 变得 XCTAssertTrue)
  6. 除上述: STAssertEquals 需要重新命名为 XCTAssertEqual (注意的失踪"s"在结束)。你会知道你已经忘记了这个如果你得到这个编译器的警告: warning: implicit declaration of function 'XCTAssertEquals' is invalid in C99
  7. 新XCTest维护宏不允许 nil 可以通过为失败的说明。例如, XCTAssertNotNil(anObject, nil) 是不可能的和必须改变 XCTAssertNotNil(anObject).你会知道你有这样的问题当你得到这个编译器的错误: error: called object type 'NSString *' is not a function or function pointer.
  8. 如果你 需要通过一个失败说明,新XCTest维护宏需要一个不断表达的格式说明,只是因为 NSString 类方法 stringWithFormat: 不。你会知道你有这样的问题当你得到这个编译器的错误: error: expected ')'.一些例子:
NSString* formatSpecifier = @"%@";
NSString* failureDescription = @"foo";
// These are OK
XCTAssertNotNil(anObject, @"foo")
XCTAssertNotNil(anObject, @"%@", failureDescription)
// These are not OK
XCTAssertNotNil(anObject, failureDescription);
XCTAssertNotNil(anObject, formatSpecifier, failureDescription);

最后但并非最不重要的是,正如已经提到的另外,参考XCTest框架需要加入到该单元的测试的目标。你会知道你已经忘记了这个如果你得到错误,例如接头 Undefined symbols for architecture i386: "_OBJC_CLASS_$_XCTestCase", referenced from: foo.

模式6更新:联对XCTest不再需要的是在低6(事实上XCTest甚至不是列为一个提供了框架).而不是设置建设CLANG_ENABLE_MODULES为是(暴露在UI为"启用的模块(C的和目标-C)").这将引起 clang 自动链接的对XCTest时,看到一个 #import <XCTest/XCTest.h> 发言。详情可在 "模块"部分的文件铛.


第2部分:如何运行OCUnit试验在工业化5

在这一点上,我有个接头的错误,使我意识到我的任务迁移到XCTest失败了。其原因是:XCTest不是部分的SDK6.1,但我仍然建立自己的项目与基SDK iOS6.1(这样的回答 解释了如何将SDK6.1载5).

因为我无法继续移徙,我的解决方案的时刻,因此,要保持我的单元测试的基础上SenTestingKit/OCUnit,直到我找到的时间来提升我的应用程序iOS7.这是什么,我不得不这样做,以便获得该单元的测试,以运行:

  1. 删除"运行的脚本"构建阶段,从该单元的测试的目标。这是所有需要让模式的执行单位测试通过"测试"的行动( + U) 虽然该单元的测试的目标是选择.
  2. 这不是理想的,但是,因为我不想开关的目标只是执行单位测试。而不是我想要的执行单位测试 虽然主要目标是选择.第二步,因此修改的主要目标的工业化方案,以便当我运行"测试"的行动、单元测试的目标是测试的执行,而不是。

最终的解决方案是不如在模式4.x在该单元的测试都是自动执行的每一次,我跑的主要目标是"执行"或"建造"行动。不幸的是,似乎我不能让这个工作没有"运行的脚本"建立阶段。

其他提示

编辑->重构->转换为XCTest

OCUnit测试仍然可以工作,但是你可能会以及迁移。变化最终会相当小。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top