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

时间:2018-10-05 15:21:27

标签: ios unit-testing xcode-ui-testing ui-testing

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

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

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

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

这是应用程序的行为:用户首先进入处于MyDataListViewController状态的loadingviewDidLoad方法激发一个异步函数,比如说我们使用{{ 1}}:

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的{​​{1}}值来打开模式弹出窗口。

MyData

提供此信息

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

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

3 个答案:

答案 0 :(得分:1)

您对特定问题的答案太长,无法提出SO答案。但是,您的根本问题之一似乎是单元测试和UI测试之间的区别是什么。在这里可以回答

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

单元测试每个测试只能测试一个类。该类需要与之交互的任何对象都应替换为测试控制的伪对象。如果您不插入伪造的对象,那么您将无法知道失败的测试是来自于您真正尝试的事物还是它所使用的事物。 (应该注意的是,还有诸如集成测试之类的功能,它们可以测试功能而不会伪造网络响应,而无需做任何其他事情。)

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

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

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

要更深入地了解Xcode的单元和UI测试,周围有一些博客文章和书籍:

博客帖子

书籍

我敢肯定还有其他资源,但是这些应该可以帮助您入门。雷·温德利希(Ray Wenderlich)的文章应该为您提供一个很好的概述,并允许您针对Google和SO提出更具针对性的问题。

答案 1 :(得分:0)

对于UI测试,用户可以直接通过具有不同设备版本和操作系统的模拟器进行浏览。这样他们就可以获得每种设备和版本的特定UI。现在,UI与功能同样重要。

对于单元测试,需要包含代码,并且需要通过相关API的正确响应来检查API的响应,代码集,任何直接崩溃,应用程序流程。通常,开发人员负责单元测试,以便应用程序可以进行测试。

答案 2 :(得分:0)

他们每个人都可以执行性能测试。 UI测试的主要优点是可以访问UI元素

  • 应用
    • 单元测试。

MyApp

MyAppTests.xctest

  • UI测试

MyAppUITests-Runner

MyAppUITests.xctest

  • 框架
    • 单元测试。
      • 不能在真实设备上运行
Cannot test target “<target_name>” on “<device_name>”: Logic Testing Unavailable Logic Testing on iOS devices is not supported. You can run logic tests on the Simulator.

构建文件夹

  • UI测试 MyFrameworkUITests-Runner