iOS - 如何区分 UI 和单元测试,以及如何在这种具体情况下使用它们?

2023-12-03

我对 UI 和单元测试完全是初学者,并且对如何使用它们以及如何区分它们感到非常困惑。所以我考虑了以下用例:

我有一个用户拥有一组MyData,一个像这样的简单对象:

class MyData: NSObject {
    var settled: Bool?
    var id: String?
}

class User {
    var datas: Set<MyData>?
}

以下是应用程序的行为:用户来到MyDataListViewController那是在一个loading首先声明,viewDidLoad方法触发一个异步函数,假设我们使用Parse为了这:

static func loadDatas(success: ((Set<Data>) -> Void)?, error: ((String) -> Void)?) {
    // Here we fetch the datas and return then in the success or an error
    // ... 
}

回调结果填充控制器的UITableView,当点击一个单元格时,它会打开一个特定的模式弹出窗口MyData用一个按钮来改变它的settled value.

myData.settled = !myData.settled
myData.save()

鉴于此信息,

  • 我如何将 UI 测试和单元测试分开?
  • 我应该如何以及为每个测试设置什么?

感谢您阅读我的文章并帮助我,如果这听起来很初学者,再次抱歉。我对这个问题仍然很困惑。另外,抱歉,如果有比 SO 更好的地方适合此类问题,我真的不知道该去哪里问。


您的具体问题的答案太长,无法给出如此答案。然而,您的根本问题之一似乎是单元测试和 UI 测试之间的区别是什么。那can在这里得到解答。

真正简短的版本是,单元测试可以访问应用程序中的代码(或您正在构建的任何类型的模块),而 UI 测试可以访问not可以访问代码。

单元测试每次测试仅测试一个类。该类需要与之交互的任何对象都应该替换为测试控制的假对象。如果您不插入假对象,您将无法知道失败的测试是来自您真正尝试测试的对象还是它使用的对象。 (应该注意的是,还有集成测试这样的东西,它可以测试功能而不会伪造任何东西,而不仅仅是网络响应)。

理想情况下,对于单元测试,您希望应用程序中的每个类都有一个测试用例类。然后每个测试用例可以专注于单个类并尽可能彻底地测试它。

UI 测试利用 Apple 各种平台的辅助功能来有效地假装是使用该应用程序的用户。这个想法是,您使用 Xcode 记录在应用程序中完成任务的一系列操作(也许添加待办事项),然后编辑 Xcode 为您生成的代码来测试特定的事情,就像表视图现在有一个其中的待办事项以及该单元格是否包含正确的标题。

您将需要使用 Xcode 的录制功能来开始 UI 测试,因为代码一开始对您来说有点陌生。这是因为 UI 测试无法访问应用程序的代码,因此它无法请求出口,它必须找到具有可访问性的元素(如果您将可访问性标签添加到尽可能多的元素,您的生活会变得更轻松) UI 元素尽可能)。

要更深入地了解使用 Xcode 进行单元和 UI 测试,可以参考一些博客文章和书籍:

博客文章

  • https://www.raywenderlich.com/709-ios-unit-testing-and-ui-testing-tutorial
  • https://medium.com/flawless-app-stories/a-complete-list-of-articles-on-unit-testing-with-swift-from-2017-9be8f046ef25

Books

  • https://www.packtpub.com/application-development/test-driven-ios-development-swift-4-third-edition(如果您有帐户,可在 Safari 在线上使用)
  • https://www.hackingwithswift.com/store/testing-swift(目前只限预购)

我确信还有其他资源,但这些应该可以帮助您入门。 Ray Wenderlich 的文章应该能让您有一个很好的概述,并让您能够为 Google 和 SO 制定更有针对性的问题。

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

iOS - 如何区分 UI 和单元测试,以及如何在这种具体情况下使用它们? 的相关文章

随机推荐