Xcode 7†有一种直接测试UI的新方法,包括新的测试目标“iOS UI Testing Bundle”(或“OS X”)。
在UI测试目标中,似乎没有对构成您的App的模型或类的内置访问权限。例如。您的UI测试无法调用[UIApplication sharedApplication]
。
这意味着“应用程序测试”和“UI测试”存在于可能不可逾越的鸿沟中。
如上所述here:
问题是Xcode的UI测试不允许访问实际的应用程序。
问题:
xcodeproj
。†在撰写本文时,测试版软件。
答案 0 :(得分:7)
黑盒测试
UI测试是一个black-box testing框架。您不必了解正在测试的代码的实现。
例如,您应该只关心标签上的值是否更改,而不是控制器将正确的数据传递给视图。您可以从应用程序的用户角度考虑UI测试。她并不关心你的ItemsViewController
是如何工作的(甚至是它存在的),为什么UI测试呢?
进入"工作"
话虽如此,我理解你的沮丧。如果您可以启动视图控制器,然后使用UI测试并进行断言,那就太棒了。但是,从Beta 5开始,这是不可能的。
有趣的是,您可以使用UI测试顶部的简单@testable import ModuleName
创建应用程序对象的实例。请注意,您无法通过类似.tap()
的方法与其进行实际互动,因为它是UI*
类,而不是XCUI*
类。
将Donut
视为应用程序的模块名称。
import XCTest
@testable import Donut
class DonutUITests: XCTestCase {
let app = XCUIApplication()
override func setUp() {
continueAfterFailure = false
app.launch()
}
func testItemsViewController() {
let controller = ItemsViewController()
controller.addItemButton.tap() // <---- UIButton does not respond to tap()!
}
}