What is XCUITest and XCTest
Xcode UI Testing is also known as XCUITest is a huge expansion of the testing technology in the Apple
platform apps like iOS.XCTest is a general testing framework, used for unit integration, network, or performance testing of Apple platform apps. With XCTest you can treat it as a xUnit type of test framework, which can be used for lower-level testing.
platform apps like iOS.XCTest is a general testing framework, used for unit integration, network, or performance testing of Apple platform apps. With XCTest you can treat it as a xUnit type of test framework, which can be used for lower-level testing.
The XCUITest framework is an extension of the XCTest framework but there are some basic differences between XCTest and XCUITest framework.
- XCTest framework is a completely white-box framework where you can access the data and API in your main app.
- XCUITest is completely black-box to your app, so you cannot access the data or API of your main app.
Page Object Model (POM)
The main idea behind the Page Object Model (POM) design pattern, is to create an object repository for the pages in the application, which will then be used in the tests. In other words, instead of including the page elements and the test code together within the test, we separate them into 2 different entities: the pages and the test scenarios. Using this concept, each screen in the application will have a corresponding page class. The page classes will identify the elements in the page and contain methods that perform operations on these page elements.
This framework adopts the POM design pattern and is structured as follows:
'Pages' folder
Contains all Page object classes.
These classes represent the actual screens of the application. A Page Object class will contain a series of objects, representing the application screen, and a series of methods, representing the features of that screen.
'Tests' folder:
Contains all test classes or scripts.
These classes define the user flow or end-to-end test scenario by referencing the page object class methods.
'Utilities' folder:
Contains helpers, extensions to the XCTUITest, scripts.
How to Write Tests
All page object classes and tests will extend the BasePage or BaseTest, thus inheriting all the base methods. These classes contain common functionality for e.g. setting up the app, terminating the sessions, or initializing page objects.
1. Create the BaseScreen
2. Create a Screen class named as HomeScreen by extending the BaseScreen. Define UI elements via the app using the accessibility identifiers of the elements
3. If the element doesn't have an accessibility element then find the relevant view and add the accessibility identifier for it. ex: `homeText` that is used `readmeMd`. This is an example of why XCUITest is not only a black-box solution. It enables us to modify source code for the sake of writing better-automated UI tests. This is one of the advantages over the non-native automation toolings.
4. Create the BaseTest. The BaseTest should handle all the basic things for launching, terminating the app also it should include creating basic test objects for writing tests.
5. Create a test class for the screen by extending the BaseTest and calling them for the test steps. Test setup should handle all the required actions
Do you want to run these tests in your local and have experience with XCUITest for UI tests, XCTest for unit tests, and also overall iOS app structure then you are ready to go with my repo here: testdictionary-ios-app.