Unit and UI testing in iOS


XCTest is Xcode’s testing framework.

It is a base class used to create and run unit tests, performance tests, and UI tests for your Xcode project.

It consists 2 main important methods,

1)setUp():- setUp is called before each of the test case is executed.

2)tearDown():- tearDown() is called after the execution of the test case for cleaning up the data ,so that it won’t create any error.

Types of XCTest:

1)Unit Testing

It is used to test the small unit of code.

It includes both standard Unit testing and Integration testing.

2)UI Testing

UI Test will be able to make sure that everything in user interface is behaving correctly.

It always perform on the top of your app’s UI.

It is also called as a black box testing because it won’t rely on any knowledge of the function or class of your app.

3)Performance Testing

Performance test runs multiple time over a given test to look at the average time , memory usage etc.

Basic Unit Test Assertions:

  • There are total 6 types of Assertions.

Boolean Assertions:- Test a condition that generates a true or false result

Nil and Non Nil Assertions:- Check whether a test condition is nil or non-nil.

Comparable Values Assertions:- Compare two values to determine whether one is larger or smaller than the other.

Equality and Non Equality Assertions:- Check whether two values are equal or unequal.

Error Assertions:- Check whether a function call throws (or does not throw) an error.

Failing Unconditionally:- Generate a failure immediately and unconditionally.

3Key Classes of UITesting:


A proxy for an application that can be launched and terminated.

  1. func launch() :- Launches the application
  2. func activate():- Activates the application
  3. func terminate():- Terminates the application


A UI element in an application.

XCUIElement provides keyboard- and mouse-like interactions such as typing, hovering, clicking, and scrolling.

XCUIElement provides gestural interactions such as tapping, pressing, swiping, pinching, and rotating.


A query for locating UI elements i.e count , elementAtIndex() etc.

While doing UITest, we want to see the flow of app then we put the debugger and checks the view hierarchy , labels, textfields ,buttons, images in the testExample().

UITest provides a tool UIRecording , by enable the uirecording at first time we have to run the testfunc() so that it will record all the thing that we have done on the UI i:e tapping , swipe gestures , labels , buttons etc.

From second time , we only have to run the testfunc() , it will automatically check the actions in the function which is already recorded.

On the basis of this recording UITest will performed. If this recording runs perfectly then the test is passed else test is failed.

Performance Testing

Measure block is used to check the average running time of both unit and ui test.

It will run the test multiple times i:e 10 times to calculate the average.

Xcode also provides a tool to check the coverage of code written in the view controller in your app.

  1. For ViewController

2. For TestVC

If you have any doubt then you can visit, https://docs.google.com/presentation/d/11xDocxBzmryqOrTLj8x8T3kQnlk6DsofIljizjYP6S0/edit#slide=id.g6c40f4cfb5_0_5





iOS Developer

Love podcasts or audiobooks? Learn on the go with our new app.

SwiftUI | Play audio with AVAudioPlayer

Part 5: How to reduce and reuse views

7 Must have iOS14 Homescreen Widgets (November 2020)

5 Outrageously Popular Open-Source iOS Libraries

Frames and Bounds in a UIView (iOS)

SwiftUI 2.0 | Integrate a map & display annotations in iOS 14

How to: Add a search bar to NavigationView in SwiftUI

NavigationView SearchBar Image

SwiftGen: The Swift Code Generator

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Ronak Patel

Ronak Patel

iOS Developer

More from Medium

[Swift] Two-way communication between iOS Webview and React

Offline Data Sync In Mobile Applications

Abstract Factory Pattern in Swift

[RxSwift] Delegate Proxy