Search code examples
swiftxctestxcode-ui-testingios-ui-automationxctestcase

How to run swift XCTest tearDown once


I am using xcode 8.3.3, swift, and I am trying to get the tearDown method to run only once.

I launch the application once with the solution provided here: XCTestCase not launching application in setUp class method

In the tearDown method, I want to logout of the application. I only want to do this once.

The XCTest documentation has a class tearDown() method, but when I try to use it - it doesn't have access to the application anymore?: https://developer.apple.com/documentation/xctest/xctestcase/understanding_setup_and_teardown_for_test_methods

This is all I get when I am in the tearDown method and so it can't access any elements on the application anymore:

enter image description here

How can I run the code in the tearDown just once at the end of all tests?


Solution

  • You can do something like this

    import XCTest
    
    class TestSuite: XCTestCase {
    
        static var testCount = testInvocations.count
    
        override func setUp()
        {
            super.setUp()
    
            TestSuite.testCount -= 1
        }
    
        override func tearDown()
        {
            if TestSuite.testCount == 0 {
                print("Final tearDown")
            }
    
            super.tearDown()
        }
    
        func testA() {}
        func testB() {}
        func testC() {}
    }