I'm trying to create a reusable test harness in Swift with the idea that subclasses will extend the test harness to provide the instance under test, and can add their own subclass-specific test methods, something like this:
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())
  }
}
However, when XCode's testrunner tries to run FooPrimeTests, it doesn't call the no-arg init(), it calls init(invocation: NSInvocation!) (and fails because there isn't one). I tried to override this in FooTestHarness:
  init(invocation: NSInvocation!, instance: Foo) {
    self.instance = instance
    super.init(invocation)
  }
and in FooPrimeTests:
  init(invocation: NSInvocation!) {
    super.init(invocation, FooPrime())
  }
but this fails with the message 'NSInvocation' is unavailable.
Is there a workaround?
