我想在Swift中创建一个可重用的测试工具,其子类将扩展测试工具以提供待测试的实例,并且可以添加它们自己的特定于子类的测试方法是这样的:Swift:覆盖需要NSInvocation的初始化程序
class FooTestHarness: XCTestCase {
let instance: Foo
init(instance: Foo) {
self.instance = instance
}
func testFooBehavior() {
XCTAssert(instance.doesFoo())
}
}
class FooPrime: Foo {
func doesFooPrime(): Bool { /* ... */ }
}
class FooPrimeTests: XCTestCase {
init() {
super.init(FooPrime())
}
func myInstance(): FooPrime {
return instance as FooPrime
}
func testFooPrimeBehavior() {
XCTAssert(myInstance().doesFooPrime())
}
}
然而,当Xcode的TestRunner的尝试运行FooPrimeTests
,它不会调用无参数init()
,它调用init(invocation: NSInvocation!)
(和失败,因为没有一个)。我试图在FooTestHarness
覆盖此:
init(invocation: NSInvocation!, instance: Foo) {
self.instance = instance
super.init(invocation)
}
和FooPrimeTests
:
init(invocation: NSInvocation!) {
super.init(invocation, FooPrime())
}
但这种失败的消息'NSInvocation' is unavailable
。
是否有解决方法?
我有同样的问题! – Andy
作为一种解决方法,也许你可以尝试嘲笑你的对象。您将能够重定向init调用。 – Pintouch