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())
}
}
, 엑스 코드의의 TestRunner가 FooPrimeTests
을 실행하려고 할 때, 그것은 인수 없음 init()
를 호출하지 않습니다, 그것은 init(invocation: NSInvocation!)
를 호출 (한이 없기 때문에 실패).
init(invocation: NSInvocation!, instance: Foo) {
self.instance = instance
super.init(invocation)
}
및 FooPrimeTests
에 : 나는 FooTestHarness
이를 무시하려
init(invocation: NSInvocation!) {
super.init(invocation, FooPrime())
}
을하지만이 메시지 'NSInvocation' is unavailable
와 함께 실패합니다.
해결 방법이 있습니까?
동일한 문제가 있습니다. – Andy
임시 해결책으로 어쩌면 객체를 조롱 해 볼 수 있습니다. init 호출을 재전송 할 수 있습니다. – Pintouch