IOS 为什么要对 class 类 ViewController 进行单元测试
IOS Why Unit Test a class calls ViewController
我写了一个如下的单元测试:
class Test445Tests: XCTestCase {
func testPerformanceExample() {
XCTAssert(true)
}
}
当测试运行时,有东西调用 ViewController.viewDidLoad!有人可以解释为什么会这样吗?
class ViewController: UIViewController {
static var s = false
override func viewDidLoad() {
super.viewDidLoad()
ViewController.s = true // put the debugger here.
}
}
如果您编写此代码并将调试器放在 ViewController 上,您可以检查调试器是否会在该行停止。
它正在创建 ViewController
的实例,因为您的应用程序在启动时创建了一个 ViewController
,并且您的测试包使用您的应用程序作为其“主机应用程序”:
如上所示配置设置后,这意味着 Xcode 通过启动主机应用程序运行测试包中的测试,然后将测试包注入其中。
您可以将“主机应用程序”设置更改为“None”:
当设置配置为“None”时,Xcode 使用称为 XCTest 代理的非 GUI 应用程序运行您的测试包,并且不会启动您的应用程序,因此您的应用程序没有机会创建 ViewController
.
请注意,当您将“Host Application”设置为“None”时,您的测试包将无法再访问应用程序中定义的任何 API。任何你想测试的 API,你必须移动到一个框架中,link 带有该框架的测试包(在测试包的“构建阶段”选项卡中)。
另请注意,即使将“主机应用程序”设置为“None”,Xcode 仍会启动模拟器。允许您的测试用例使用 iOS 系统服务,这些服务仅在模拟器为 运行 时可用,并且 Xcode 事先不知道您的测试用例是否需要这些服务。所以它必须先启动模拟器,以防万一
我写了一个如下的单元测试:
class Test445Tests: XCTestCase {
func testPerformanceExample() {
XCTAssert(true)
}
}
当测试运行时,有东西调用 ViewController.viewDidLoad!有人可以解释为什么会这样吗?
class ViewController: UIViewController {
static var s = false
override func viewDidLoad() {
super.viewDidLoad()
ViewController.s = true // put the debugger here.
}
}
如果您编写此代码并将调试器放在 ViewController 上,您可以检查调试器是否会在该行停止。
它正在创建 ViewController
的实例,因为您的应用程序在启动时创建了一个 ViewController
,并且您的测试包使用您的应用程序作为其“主机应用程序”:
如上所示配置设置后,这意味着 Xcode 通过启动主机应用程序运行测试包中的测试,然后将测试包注入其中。
您可以将“主机应用程序”设置更改为“None”:
当设置配置为“None”时,Xcode 使用称为 XCTest 代理的非 GUI 应用程序运行您的测试包,并且不会启动您的应用程序,因此您的应用程序没有机会创建 ViewController
.
请注意,当您将“Host Application”设置为“None”时,您的测试包将无法再访问应用程序中定义的任何 API。任何你想测试的 API,你必须移动到一个框架中,link 带有该框架的测试包(在测试包的“构建阶段”选项卡中)。
另请注意,即使将“主机应用程序”设置为“None”,Xcode 仍会启动模拟器。允许您的测试用例使用 iOS 系统服务,这些服务仅在模拟器为 运行 时可用,并且 Xcode 事先不知道您的测试用例是否需要这些服务。所以它必须先启动模拟器,以防万一