iOS Unit Testing: Understanding Snapshot Testing and Why I Don't Like XCUITest

Cover Image for iOS Unit Testing: Understanding Snapshot Testing and Why I Don't Like XCUITest

As an iOS developer, it's crucial to have a robust testing framework in place to ensure the quality and reliability of your app. While XCUITest is the testing framework provided by Apple, it's not the only option available. In this blog, we'll discuss why I don't like XCUITest and why I prefer alternative testing frameworks such as Snapshot Testing.

Unit Testing with XCUITest:

XCUITest is a testing framework that enables you to write and run tests for your iOS app. It provides a suite of tools for automating UI tests, making it easy to test your app's behavior and user interface. However, despite its simplicity and ease of use, I have found that XCUITest has several limitations that make it a less than ideal choice for unit testing.

First, XCUITest is limited in its ability to test the underlying logic of your app. XCUITest is designed primarily to test UI elements, not the underlying logic and business rules of your app. This means that you may have to write separate tests for each individual unit of code, making the testing process more time-consuming and difficult.

Second, XCUITest can be slow and flaky. XCUITest runs on the simulator or device, making tests slow and unpredictable. Furthermore, XCUITest relies on the user interface to perform tests, making tests flaky and unreliable. This can lead to a large number of false positives and negatives, making it difficult to trust the results of your tests.

Snapshot Testing:

Snapshot testing is a type of testing that compares the current UI of an app with a previously saved UI, to verify that the UI remains unchanged. This is particularly useful for testing UI elements that are difficult to manually test, such as animations or complex user interfaces. In iOS development, the framework used for snapshot testing is typically swift-snapshot-testing, FBSnapshotTestCase, etc. Snapshot tests are fast, reliable, and easy to write and maintain, making them a great alternative to XCUITest for unit testing.

In conclusion, while XCUITest is a simple and convenient testing framework provided by Apple, it has several limitations that make it a less than ideal choice for unit testing. On the other hand, snapshot testing is a reliable and efficient alternative that provides many benefits over XCUITest. As an iOS developer, it's important to choose the right testing framework for your app and to ensure that your app is thoroughly tested and reliable.

Examples: