【问题标题】:What are the limitations of an iOS hostless test target (formerly logic tests)?iOS 无主机测试目标(以前的逻辑测试)有哪些限制?
【发布时间】:2016-12-31 01:21:24
【问题描述】:

TLDR:在没有宿主应用程序的情况下运行 iOS 单元测试有哪些限制?


互联网上似乎很多关于 iOS 无主机测试(逻辑与应用程序测试)的帖子可能已经过时了。例如,根据thisthis Stack Overflow post,您不能在逻辑测试中实例化UIFont。我只是尝试使用运行 iOS 10.2 的 Xcode 8.2.1 和 iPhone 7 模拟器来执行此操作,它似乎工作正常。

这是一个包含此类测试的示例项目: https://github.com/lyahdav/SnapshotLogicTest

根据this blog post

这实际上是 Xcode 逻辑测试的一个限制——它们不会启动 一个 UIApplication 实例,不能很好地与 UIKit 配合使用

但是,如果您查看我上面的示例项目,它正在创建一个 UIView 并使用 FBSnapshotTestCase 断言视图在逻辑测试中呈现相同并且一切似乎都工作正常。

此外,我再也找不到 Apple 的 Logic vs Application 测试文档了。例如,this postthis post 链接到 Apple 网页,这些网页现在似乎已失效,我找不到更新的网页来替代它。

我想知道 Apple 是否已将区别最小化,因为区别只是在您的测试目标上设置了主机应用程序。但我不清楚逻辑测试是否有任何限制。我真的很喜欢它们,因为它允许我为我的应用程序的某些部分创建更小、更独立的测试目标,这些目标可以比应用程序测试套件运行得更快。

更新:我想我会添加一个关于UI Testing 的注释。根据 Apple 文档,从 Xcode 7 开始,他们将 UI 测试添加为 XCTest 的一部分。这似乎与关于主机与无主机单元测试目标的点正交。

【问题讨论】:

    标签: ios xcode unit-testing


    【解决方案1】:

    我想知道 Apple 是否已将区别最小化,因为区别只是在您的测试目标上设置了主机应用程序。

    现在有单元测试和 UI 测试。两者都涉及运行应用程序。 Apple 根本不再单独谈论逻辑测试。

    【讨论】:

    • 您的示例从不测试有关应用程序的任何内容;这实际上是对单独框架(pod)的测试。因此它不需要运行应用程序。
    • 我刚刚更新了测试存储库,让测试练习成为应用程序的一部分,结果相同。
    • 此外,如果您从测试目标设置中删除主机应用程序,则单元测试不涉及运行应用程序。它不会在模拟器中启动应用程序(但由于某种原因它会启动模拟器本身)。
    • 我不确定您所说的“结果”是什么意思。您关于 UIFont 等问题的部分在我看来就像一条红鲱鱼,所以我忽略了它。我试图区分您所说的“逻辑测试”是什么意思。您似乎试图区分运行应用程序和不运行应用程序,因此我就应用程序未运行的原因提出了建议。我解释说苹果不再提到区别。他们只是给你一个内置单元测试的项目,然后他们确实运行应用程序。除此之外,我看不出你的问题是什么。
    • 我更新了问题以更简洁地提出我的问题。通过“结果”,我的意思是我更新了测试存储库以进行测试来执行生产代码,但我仍然能够成功运行使用 UIKit 的测试,我认为这是无主机测试目标的限制。如果无主机测试套件似乎没有限制,为什么默认在主机应用程序中运行单元测试套件?我猜有一些,但我试图了解它们是什么。无主机测试目标的好处是速度,无需在每次测试运行时等待应用启动。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多