ios - Swift:XCTest 类 'FirstDemoTests' 没有初始化器

标签 ios swift xctest xctestcase

我有以下代码(试图避免隐式展开):

class MyTests: XCTestCase {

    var viewController: ViewController

}

但我收到以下错误:

Class 'MyTests' has no initializers

我解决了这个问题:

class MyTests: XCTestCase {

    var viewController: ViewController

    override init() {
        self.viewController = ViewController()
        super.init()
    }
}

在 XCTest 类中使用 init() 会有问题吗?
我正在使用 Swift 4、Xcode 9.2。

最佳答案

我知道你想避免隐式解包,但不幸的是(除非你想经历编写自己的测试运行器的麻烦),你无法控制在测试运行时调用哪个初始化程序.

如您所知,您可以通过隐式解包并在 setUp() 中设置属性值来解决这个问题,它在每次测试之前都会被调用,因此您可以确保该属性将在你的测试中不是零。这样比较安全。

class MyTests: XCTestCase {

    var viewController: ViewController!

    override function setUp() {
        super.setUp()
        self.viewController = ViewController()
    }
}

或者,您可以使属性惰性,这意味着它不必隐式展开。这意味着该属性不必在对象初始化期间进行初始化,因此您无需编写新的初始化程序,而是会在第一次访问时进行初始化。

class MyTests: XCTestCase {

    lazy var viewController: ViewController = {
        return ViewController()
    }()
}

关于ios - Swift:XCTest 类 'FirstDemoTests' 没有初始化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48797202/

相关文章:

ios - NSCalendar 日期周数

ios - Swift 4 @escaping 类型作为参数

swift - 比较可选数组

ios - 如何快速访问 XCTest 的外部文件

ios - 在 Swift 中将 UIImage 转换为 UInt8 数组

c++ - 使用多个框架给出 clang : error: linker command failed with exit code 1

ios - 安装Xcode10.2.1还是报错 'Module compiled with Swift 5.0.1 cannot be imported by the Swift 5.1 compiler'

iOS - SDK - 如何在 UIWebView 中打开大型主题文件?

ios - OCMockObject 模拟一个实例方法

ios - 使用 XCTest 设置一个 TestProject,其中包含针对 iOS 和 OSX 的两个测试目标以及共享单元测试