The ultimate guide to iOS Unit Testing with Swift and Xcode

Xcode Testing

Posted on 29 Jun 2020 . 2 min read


Unit testing is a testing method where you can test “unit” of code whether it is working as you want or not. In Xcode, use XCTest framework to perform unit tests.


Unit test is a function starts with lowercase word "test” and it must be method of subclass of XCTestCase . It has conditions to check code is doing right as expected, but it has no parameters and no return value.


How to setup unit testing

Because units tests are perform under unit testing target you must have to add them before use. You can include “Unit Testing Bundle” in Xcode project two ways :

  • First, is to check “Include Unit Tests” while creating new project.
  • Another, way is to go to File > New > Target and search for “Include Unit Tests” .


After setup it will generate new subclass of XCTestCase in your project inside testing folder which you can find inside Project navigator.

import XCTest

class XCArticleTests: XCTestCase {

   override func setUp() {
     // method is called before each test method
     // setup code here
   }
   
   override func tearDown() {
     // method is called after each test method in the
     // code to perform cleanup
   }
   
   func testExample() { 
     // add test case.
     // Use XCTAssert to test code
   }
}


This example defines XCArticleTests which is a subclass of XCTestCase . It has three methods setUp() for initial setup, tearDown() to perform cleanup after execution and test method called testExample to perform all tests. If you want to read more about setup and teardown methods go to set up and tear down state in your tests article


How to write unit tests

Define new extension of type Int with a function called cubed which returns cube number.

extension Int {
   func cubed() -> Int {
      return self * self * self
   }
}


Define new XCTestCase subclass CubeNumberTests with a method named testCubeNumber(). This method creates two properties one is number and another for cubeNumber and checks cubeNumber equals to 125.

class CubeNumberTests: XCTestCase {
    
    func testCubeNumber() {
       let number = 5
       let cubeNumber = number.cubed()
       XCTAssertEqual(cubeNumber, 125)
    }
}


Click on gray diamond button on the left side next to test method. The diamond turns into green if test passes or otherwise it will give error message. The above test will be succeed because cube number of 5 matches 125.


Conclusion

Unit testing is a necessary skill if you want to be a good developer. It look hard in the beginning but it gets easier as you use them. Don’t use unit tests all over your application it will be confusing and time wasting .You should use them when it’s too necessary.


Don’t hesitate to contact me if you have any questions or queries. Follow me on twitter @gurjitpt for any updates.

Thanks!


Share this article



Written By

Generic placeholder image

Gurjit Singh

I’m Computer Science graduate and an iOS Engineer who writes about Swift and iOS development. Follow me for more updates:


Discover articles by topics

SwiftUI Class Struct Networking XCode NSCache Enum Optionals Property Observers Closures Guard Reviews StoreKit App Store Algorithms Testing Operators Protocol Extensions Weak Unowned SwiftData WWDC23 GCD API Admob SwiftLint Lottie Foreach Objective-C UIKit NavigationSplitView

Related Articles


String Concatenation in Swift: A Comprehensive Guide

In any programming language, working with strings is essential, and Swift is no different.Whether you are building iOS apps......

2024-10-17 . 3 min read     String Concatenation

Read More »

Integrating SwiftUI with UIKit Using UIHostingController

With the introduction of SwiftUI, Apple has provided developers with a modern way to build user interfaces across all Apple platforms....

2024-07-09 . 3 min read     UIHostingController

Read More »

Deep Dive into Autorelease Pools in Swift

In the realm of software development, memory management plays a crucial role in ensuring the efficient allocation and deallocation of memory...

2024-01-28 . 4 min read     Swift Autorelease

Read More »

Swift enum equatable: with or without associated values

Swift enums provide a powerful way to model a set of related values. Enums can be equipped with associated values, allowing them to represen...

2024-01-24 . 3 min read     Swift Enums

Read More »

How to create Date Picker in SwiftUI

Use a DatePicker when creating a view that enables users to choose both a calendar date and, if needed, a specific time.In SwiftUI, you can ...

2024-01-16 . 2 min read     SwiftUI DatePicker

Read More »

Getting started with Swiftlint to enforce Swift style

SwiftLint is a tool that ensures Swift code adheres to defined style guidelines. It automates code review by identifying and suggesting impr...

2023-12-29 . 4 min read     Swift SwiftLint

Read More »