Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Cуществует ли в XCTest методы-аналоги аннотациям @Before..., @Afrer... из Selenium?

xctest
mobile
ios
Теги: #<Tag:0x00007f7b62b2ca20> #<Tag:0x00007f7b62b2c8e0> #<Tag:0x00007f7b62b2c7a0>

(Oleh Petrenko) #1

Иными словами, существуют ли в XCTest методы для pre/post conditions?


(Aleksey Ilyenko) #2

Существуют.
Ваш тестовый класс должен наследоваться от XCTestCase, и тогда можно имлементить два метода:

  • setUp (выполняется перед каждым тестом) - тут можно, например, стартовать приложение или выполнять другие preconditions
  • tearDown (выполняется после каждого теста) - тут можно, например, закрывать приложение или выполнять другие postconditions

Как это выглядит в коде:

class BaseTest: XCTestCase {
    override func setUp() {
        super.setUp()
        // This is the setUp() instance method.
        // It is called before each test method begins.
        // Set up any per-test state here.
    }
   
    override func tearDown() {
        // This is the tearDown() instance method.
        // It is called after each test method completes.
        // Perform any per-test cleanup here.
        super.tearDown()
    }
}

(Oleh Petrenko) #3

Спасибо большое за ответ.

Дело в том, что нужны 2 preconditions:

  1. Первый - выполняется 1 раз перед всеми тестами (@BeforeTest)
  2. Второй - выполняется перед каждым тестом (@BeforeMethod)

Заранее спасибо


(Aleksey Ilyenko) #4

Чтобы выполнить прекондишн перед классом (всеми тестами в классе) или посткондишн после класса (всех тестов в классе), Вам нужно использовать методы тестового класса (не инстанса):

override class func setUp() { 
        super.setUp()
        // This is the setUp() class method.
        // It is called before the first test method begins.
        // Set up any overall initial state here.
 }
   
override class func tearDown() {
        // This is the tearDown() class method.
        // It is called after all test methods complete.
        // Perform any overall cleanup here.
        super.tearDown()
}