Protocols

The following protocols are available globally.

  • The MTKTestable protocol provides an alternative, functional approach to XCTest‘s built in setUp & 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 the setUp & tearDown logic for large collections of types.

    Note

    Note UIViewController and its subclasses get a free implementation of test(_:) as long as they have implemented instanceForTesting(). The default test(_:) implementation for view controllers calls loadView() and viewDidLoad() before running the testBlock.
    See more

    Declaration

    Swift

    public protocol MTKTestable