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)
- function becomes a no-op when
- variables to get you the top view controller
- Example App to demonstrate capabilities
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.
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 specializesUITestKitBase
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:
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.