Я пытаюсь создать повторно используемую тестовую обвязку в Swift с идеей, что подклассы будут расширять тестовую обвязку, чтобы предоставить тестируемый экземпляр, и могут добавлять свои собственные методы тестирования, специфичные для подкласса, примерно так:
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 пытается запустить 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
.
Есть ли обходной путь?