UITestKit 0.1.2

UITestKit 0.1.2

Maintained by Eric Internicola.



UITestKit 0.1.2

UITestKit

An iOS Library for UI Testing

Features

  • UI Testing from a vanilla XCTest target
    • Enable / Disable UI Animations
    • Take screenshots on test assertion failures
    • waitForCondition function to free up the UI thread and wait for your block condition to become true (or timeout and move on)
    • pauseForUIDebug() function to allow you to pause a (configurable) amount of time between steps in your tests
      • function becomes a no-op when shouldPauseUI is false (the default)
    • variables to get you the top view controller
  • Example App to demonstrate capabilities

Build Status Documentation Platform CocoaPods
CocoaPods CocoaPods

Why not use XCUITests?

  • UITestKit lets you interact with the application code directly from test code
    • Easier mocking of model objects
    • Easier invocation of ViewControllers
    • Lower level access to your application
  • UITestKit provides convenience variables for taking screenshots from failures
  • UITestKit can be far less rigid than XCUITests

Example

To run the example project, clone the repo, and run pod install from the Example directory first. Example Tests

Requirements

  • iOS 9.0 or higher

Installation

UITestKit is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod 'UITestKit'

Code Examples

///

Best Practices

  • It is recommended to create a BaseUITest class that specializes UITestKitBase and provides convenience variables for your application's view controllers:
/// Gets you the `SquareTabVC` if it's the topVC
var squareTabVC: SquareTabVC? {
    return topVC as? SquareTabVC
}

/// Gets the `ShapesTableViewController`
var shapeTableVC: ShapesTableViewController? {
    return topVC as? ShapesTableViewController
}
  • It is recommend that you use the screenshot capability when checking for specific UI's to be visible or in a specific UI state:
XCTAssertTrue(waitForCondition({ self.shapeTableVC != nil }, timeout: 1), topVCScreenshot)

topVCScreenshot will produce failures like this:

Sample Test Failure with Screenshot

The Screenshot that is produce will look something like the following:

Author

Eric Internicola | Eric's Github Site

License

UITestKit is available under the MIT license. See the LICENSE file for more info.