无法覆盖 Swift XCTestCase 中的 init() 函数
Cannot override init() function in Swift XCTestCase
出于以下几个原因,我想在 UI 测试中覆盖 XCTestCase 的初始化函数:
- 在 setUp() 之外启动应用程序,这样应用程序就不需要为每次测试重新启动(这很乏味并且会减慢测试速度)
- 要初始化其他 类 提供通过应用程序的一般导航,我必须用测试用例 (self) 初始化它。
我现在拥有的是这样的:
import XCTest
class UITest: XCTestCase {
let app = XCUIApplication()
// Helper packages
var helper: UITestHelper!
override func setUp() {
super.setUp()
// Helper package instantiation
helper = UITestHelper(withTestCase: self, forApp: app)
continueAfterFailure = false
app.launch()
}
... tearDown(), tests ....
当我打电话时:
override init() {
super.init()
foo()
}
我得到Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
init
不是 XCTestCase
的指定初始值设定项。指定的初始值设定项是 initWithInvocation:
。这需要一个 NSInvocation
,它在 Swift 中不可用。执行您所描述的操作的唯一方法是在 ObjC 中。
这没有记录,因为它不受支持。有可能实现您所描述的内容,但它可能会以微妙的方式中断,您应该探索其他解决方案来解决您的问题。
崩溃是 ObjC 初始化语义的副产品。每个 ObjC class 必须响应 init
(因为它是从 NSObject
继承的)。但是,有很多 ObjC 对象在调用 init
时没有正确初始化。 (NSError
因为这个问题有点出名。)唯一知道的方法是通过文档。更复杂的 Swift 初始化系统是为了解决 ObjC 初始化系统中的问题。
我会把你更深层次的目标分解成单独的问题并询问如何解决它们(你还应该非常清楚你在谈论 UI 测试;虽然你的代码表明,它不是从文本中清楚)。确保您所描述的内容不会破坏 Xcode 10 的新并行测试功能和排序更改。
出于以下几个原因,我想在 UI 测试中覆盖 XCTestCase 的初始化函数:
- 在 setUp() 之外启动应用程序,这样应用程序就不需要为每次测试重新启动(这很乏味并且会减慢测试速度)
- 要初始化其他 类 提供通过应用程序的一般导航,我必须用测试用例 (self) 初始化它。
我现在拥有的是这样的:
import XCTest
class UITest: XCTestCase {
let app = XCUIApplication()
// Helper packages
var helper: UITestHelper!
override func setUp() {
super.setUp()
// Helper package instantiation
helper = UITestHelper(withTestCase: self, forApp: app)
continueAfterFailure = false
app.launch()
}
... tearDown(), tests ....
当我打电话时:
override init() {
super.init()
foo()
}
我得到Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
init
不是 XCTestCase
的指定初始值设定项。指定的初始值设定项是 initWithInvocation:
。这需要一个 NSInvocation
,它在 Swift 中不可用。执行您所描述的操作的唯一方法是在 ObjC 中。
这没有记录,因为它不受支持。有可能实现您所描述的内容,但它可能会以微妙的方式中断,您应该探索其他解决方案来解决您的问题。
崩溃是 ObjC 初始化语义的副产品。每个 ObjC class 必须响应 init
(因为它是从 NSObject
继承的)。但是,有很多 ObjC 对象在调用 init
时没有正确初始化。 (NSError
因为这个问题有点出名。)唯一知道的方法是通过文档。更复杂的 Swift 初始化系统是为了解决 ObjC 初始化系统中的问题。
我会把你更深层次的目标分解成单独的问题并询问如何解决它们(你还应该非常清楚你在谈论 UI 测试;虽然你的代码表明,它不是从文本中清楚)。确保您所描述的内容不会破坏 Xcode 10 的新并行测试功能和排序更改。