use*_*482 4 ios xctest swift xctestcase
我有以下代码(试图避免隐式展开):
class MyTests: XCTestCase {
var viewController: ViewController
}
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误:
Class 'MyTests' has no initializers
Run Code Online (Sandbox Code Playgroud)
我解决了这个问题:
class MyTests: XCTestCase {
var viewController: ViewController
override init() {
self.viewController = ViewController()
super.init()
}
}
Run Code Online (Sandbox Code Playgroud)
init()在XCTest类中使用会出现问题吗?
我正在使用Swift 4,Xcode 9.2。
我知道您想避免隐式解包,但是不幸的是(除非您想编写自己的测试运行器而麻烦),您无法控制在运行测试时调用哪个初始化程序。
如您所知,您可以通过隐式解包并在中设置属性的值来解决此问题,该属性的值setUp()在每次测试之前都会被调用,因此可以确保在测试期间该属性不会为零。这样比较安全。
class MyTests: XCTestCase {
var viewController: ViewController!
override function setUp() {
super.setUp()
self.viewController = ViewController()
}
}
Run Code Online (Sandbox Code Playgroud)
另外,您可以设置属性lazy,这意味着不必隐式地对其进行包装。这意味着该属性不必在对象初始化期间初始化,因此您无需编写新的初始化程序,而是在首次访问该属性时进行初始化。
class MyTests: XCTestCase {
lazy var viewController: ViewController = {
return ViewController()
}()
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1394 次 |
| 最近记录: |