Protocols
The following protocols are available globally.
-
The MTKTestable protocol provides an alternative, functional approach to
XCTest‘s built insetUp&tearDownmethods for handling unit tests.instanceForTesting()should provide a new instance for each call.test(_:)should effectively follow this pattern:static func test(_ testBlock: (Self) -> Void) { let testInstance = instanceForTesting() // any code that would previously live in setUp testBlock(testInstance) // any code that would previously live in tearDown }With these methods implemented, our test cases now look like this:
func testThings() { FooBarClass.test { testInstance in XCTAssertNil(testInstance.thingThatShouldBeNil) } }This allows
setUp&tearDowncode to exist across multiple files. Moreover,setUp&tearDownlogic could now be inherited. As well,MTKTestableprotocol extensions could be written to generalize some of thesetUp&tearDownlogic for large collections of types.See moreNote
NoteUIViewControllerand its subclasses get a free implementation oftest(_:)as long as they have implementedinstanceForTesting(). The defaulttest(_:)implementation for view controllers callsloadView()andviewDidLoad()before running thetestBlock.Declaration
Swift
public protocol MTKTestable
View on GitHub
Protocols Reference