Protocols
The following protocols are available globally.
-
The MTKTestable protocol provides an alternative, functional approach to
XCTest
‘s built insetUp
&tearDown
methods 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
&tearDown
code to exist across multiple files. Moreover,setUp
&tearDown
logic could now be inherited. As well,MTKTestable
protocol extensions could be written to generalize some of thesetUp
&tearDown
logic for large collections of types.Note
NoteUIViewController
and 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