Published on

SwiftUI loyihasini UI Test qilish (XCUITest)

Authors

UI Test o'zi nima?

Oldingi darsda biz Unit Test yozishni o'rgandik. U ilovaning "miyasi" (mantiqiy qismi) qanday ishlashini tekshirardi. UI Test esa huddi foydalanuvchi kabi ilovani ochadi, tugmalarni bosib ko'radi, matn kiritadi va ekranda kutilgan narsalar chiqyaptimi yoki yo'qligini tekshiradi.

Agar ilovangizda "Sign In" (Tizimga kirish) tugmasi bo'lsa va siz kodni o'zgartirayotib adashib tugmaning ishlashini buzib qo'ysangiz, UI Test buni darhol aniqlab beradi.

1. UI Test uchun yangi Target yaratish

Xuddi Unit Test kabi, UI Testlar ham o'zining alohida Target (Muhit) iga ega bo'lishi kerak:

  1. Xcode menyusida File -> New -> Target
  2. UI Testing Bundle ni tanlang (esda tuting, bu safar Unit emas, UI Testing)
  3. Nomini o'zgartirmang (odatda LoyihaNomiUITests bo'ladi).

Bunda Xcode sizga bitta o'rganish uchun tayyor shablon kod yaratib beradi. UI testlar odatda ilovani ishga tushirishdan boshlanadi: XCUIApplication().launch()

2. Xcode'ning eng qulay xususiyati: Yozib olish (Record)

UI test yozishda eng qiyin joyi bu UI elementlarni (masalan aynan qaysi tugmani) topish. Lekin Xcode'da ajoyib imkoniyat bor!

  1. Test funksiyasining ichiga kursor (sichqoncha)ni qo'ying.
  2. Ekranning pastida kichkina Qizil Doira (Record) tugmasi bor, shuni bosing.
  3. Xcode avtomat ravishda ilovani Simulyatorda ishga tushiradi.
  4. Endi simulyatorda ilovadan qanday foydalanmoqchi bo'lsangiz, shunday tugmalarni bosing va yozing (masalan ismni yozib, Sign Up tugmasini bosing).
  5. Xcode sizning har bir bosganingizni avtomat tarzda kodga aylantirib beradi!

3. Kod orqali UI Test yozish

Keling, bitta oddiy tizimga kirish jarayonini test qilamiz: Foydalanuvchi ismini yozmagunicha keyingi ekranga o'tmasligi kerak.

import XCTest

final class UITestingBootcampView_UITests: XCTestCase {

    let app = XCUIApplication()

    // Har bir testdan oldin ilovani boshidan ochadi
    override func setUpWithError() throws {
        continueAfterFailure = false
        app.launch()
    }

    func test_UITestingBootcampView_signUpButton_shouldNotSignIn() {
        // GIVEN (Berilgan holat: Ilova ochildi)

        // WHEN (Qachonki biz Sign Up tugmasini bossak, ismni kiritmasdan)
        let signUpButton = app.buttons["Sign Up"]
        signUpButton.tap()

        // THEN (Shunda: Keyingi ekrandagi 'Welcome' yozuvi chiqmasligi kerak)
        let welcomeText = app.staticTexts["Welcome"]

        // welcomeText mavjud EMASligini tasdiqlash
        XCTAssertFalse(welcomeText.exists)
    }

    func test_UITestingBootcampView_signUpButton_shouldSignIn() {
        // GIVEN
        let textField = app.textFields["Add your name..."]

        // WHEN (Foydalanuvchi ismini yozadi va tugmani bosadi)
        textField.tap()

        let aKey = app.keys["A"]
        aKey.tap()
        aKey.tap() // 'AA' deb yozdik

        let returnButton = app.buttons["Return"]
        returnButton.tap() // Klaviaturani yopamiz

        let signUpButton = app.buttons["Sign Up"]
        signUpButton.tap()

        // THEN (Shunda: 'Welcome' yozuvi ekranda chiqishi shart)
        let welcomeText = app.staticTexts["Welcome"]

        // welcomeText borligini tasdiqlash
        XCTAssertTrue(welcomeText.exists)
    }
}

Nimalarni bilish muhim?

  • app.textFields["..."] – Matn yozish maydonini uning Placeholdaridagi nomi orqali topadi.
  • app.buttons["..."] – Tugmani topish uchun ishlatiladi.
  • app.staticTexts["..."] – Oddiy Text larni topish uchun kerak.
  • .tap() – Aynan o'sha element ustiga bosish (Tap) vazifasini bajaradi.
  • .exists – Ushbu element ayni damda ekranda bor yoki yo'qligini tekshiradi.

Xulosa: UI testlar dasturingizning eng muhim jarayonlari (Sotib olish, Ro'yxatdan o'tish kabi) har doim to'g'ri ishlayotganini tasdiqlashning eng ishonchli usulidir!

Buy mea coffee