Introduction to Automated Testing in Xcode (UI and Unit Testing)

Software Testing is a necessary process to ensure that the application is meeting the expected conditions and results. In this article, I will discuss what is automated testing and give you an introduction of Unit and UI testing for Xcode.

Automated testing in Xcode consists of two kinds of testing i.e.

  • Unit Testing
  • UI Testing

Let’s us talk about them a bit.

What is Unit testing?

Unit testing is the testing of certain areas of function for a given software application. These areas of function are known as units. The application can be small or have little bits of code or whole modules.

Basically, the test is a code that you write, that performs tests to your app’s code and tells whether it is a pass or fail result, measured against a set of expectations. In Xcode, you can perform tests on your application code as well as dynamic libraries and frameworks.

So when it comes to testing, what exactly should we test?

Well, here are some common areas that you want to make sure you have tests for.

  • your core functionality. You want to ensure the primary functions of your application, performing as expected or not.
  • You want to test your user interface to make sure that actual usage and workflow is as thought off.
  • You also want to test for boundary conditions, which are the extreme conditions that your app should meet to ensure satisfactory performance.
  • And lastly, you want to write test codes for bug fixes in your application.

A useful tip while testing is to try dividing your code into smaller, testable components because small, fast-running tests can be run often and can better diagnose problems in your code base. There is a famous acronym for testing i.e.  F.I.R.S.T.

For F, we have Fast, for I, we have Independent, for R, we have Repeatable, for S, we have Self-validating, and for T, we have Timely. You should keep these words in mind while testing your application.

Basics of Unit testing in Xcode

Unit testing inside of Xcode has been around since Xcode-5. It’s performed using the XCTest framework, which is Apple’s framework that allows you to create and run unit tests and performance tests.

As of now, you can perform UI tests against your project. The primary classes that you’re going to be working within your testing are:

  1. XCTest,
  2. XCTestCase,
  3. XCTAssert.

With XCTest this is the abstract class that we use for creating, managing, and executing our tests. XCTestCase is the primary class for defining various test cases, methods, and performance. For assertions, we use XCTAssert.

Apart from the above, we have XCTestException for asynchronous assertions while coding. This is is an expectation that hopes to be fulfilled once an asynchronous task is completed.

Other stuff that we get for using unit testing inside of Xcode is that Xcode gives us the ability and functionality to observe code coverage for your project. You could see that how much of your code is actually being tested during testing. Also, debugging tests within Xcode is the same as debugging your application code.

What are UI tests?

Testing the user interface elements is the main consideration in UI testing. This testing ensures that the interaction of our application with the user must be effective, efficient and interactive in all devices. It gives us the power to test the user interface against a set of metrics in order to validate properties or the state of our UI. It’s built on top of the XCTest framework as well as the Accessibility framework. This framework is used because due it this only the XCTest finds references to specific UI objects via their accessibility description labels.

How does this work? So,  It includes a system for UIRecording, which actually records the steps taken during user interactions so that tests can be repeated automatically.

Basic of UI Testing in Xcode

There are things to keep in mind while UI testing in Xcode i.e.

  • You need to be using Xcode-7 or later.
  • If you’re doing testing for a macOS project then the project is built from macOS 10.11 or later.
  • You also need to use the helper app that comes with Xcode to be able to allow for the control necessary to perform UI tests on your macOS app.
  • For iOS, this all has to be performed on iOS-9 or later.
  • The device that is going to test needs to be enabled for development i.e. Xcode has seen them or used that device before.

A core difference between unit testing and UI testing focuses on the scope. What does this mean?

When we unit test, we have full access to all of the code i.e the scope is quite wide to us. We can test anything that comes to our mind at that time. With UI tests, the scenario changes. They have limited access i.e we can test the UI elements what is running and being presented to us the access to the code is not possible but this is also a good point from the user’s point of view, How? Think yourself a user then in that case you even don’t have access to the back-end programming for any functionality.

This testing is done to make sure that our app is performing like a charm and depicting the visual element placement as expected. Some of the classes that are used while UI testing is:

  • XCUIApplication. This is a  representation of our application inside of the unit testing framework.
  • XCUIElement,  these are the UI elements found within our application that is running.
  • XCUIElementQuery. This is used for query purposes. application for a given element.

If you want a detailed knowledge about Unit and UI testing then follow the Apple documentation.