Xcode UI Test example
Use Unit Tests to test the validity of methods in your classes. You use them to test the code you have written. (See my other example for setting up a simple Unit Test in Xcode.)
Use UI Tests to check the validity of the User Interface. Think of it like having your own robot to go through and do all the normal interactions with your app that a normal user would. This saves you the time of doing it yourself.
At the time of this writing, it is difficult to access many of the properties of the UI components, but just having a test go through tapping them and swiping them confirms that they are there.
Example
This is about the simplest setup and UI test that I could think of: a button that when pressed changes the text of a label.
Set up
- Create a new project in Xcode 7+ for iOS 9.0+.
- Make sure that Include UI Tests is checked
If you are adding UI tests to a project created before Xcode 7, see this answer. (File > New > Target > Test > Cocoa Touch UI Testing Bundle)
Add a
UILabel
and aUIButton
to the storyboard
Create an @IBOutlet and @IBAction in the
ViewController
and make thelabel
text change when thebutton
is pressed.import UIKitclass ViewController: UIViewController { @IBOutlet weak var label: UILabel! @IBAction func button(sender: AnyObject) { label.text = "Hello" }}
Do the test
- Open the YourProjectUITests file.
- Put your curser in the
testExample()
method. (You can delete the comments)
- Press the red Record button
In the app, (1) tap the label, (2) tap the button, and then (3) tap the label again. (4) Press the Record button again to stop recording. The following code should have been automatically generated for you:
func testExample() { let app = XCUIApplication() app.staticTexts["Label"].tap() app.buttons["Button"].tap() app.staticTexts["Hello"].tap()}
Use the
staticText
lines as a starting point for making anXCTAssert
. Now you should have:func testExample() { let app = XCUIApplication() XCTAssert(app.staticTexts["Label"].exists) app.buttons["Button"].tap() XCTAssert(app.staticTexts["Hello"].exists)}
Press the diamond on the left to run the UI Test. It should turn green when it passes.
- That's it! This showed that the
UIButton
andUILabel
exist and that the text of the label changed. If you want to see it fail (a good idea), you can change "Hello" to something else.
Further study
@Suragch +1 for the answer. One thing I observed and want to share that every function inside the UI Test case must start with "test". You can append extra name after that. Only this way the button(for clicking to start the test) appears.