- Published on
SwiftUI loyihasini UI Test qilish (XCUITest)
- Authors
- Name
- ShoxruxC
- @iOSdasturchi
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:
- Xcode menyusida File -> New -> Target
- UI Testing Bundle ni tanlang (esda tuting, bu safar Unit emas, UI Testing)
- Nomini o'zgartirmang (odatda
LoyihaNomiUITestsbo'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!
- Test funksiyasining ichiga kursor (sichqoncha)ni qo'ying.
- Ekranning pastida kichkina Qizil Doira (Record) tugmasi bor, shuni bosing.
- Xcode avtomat ravishda ilovani Simulyatorda ishga tushiradi.
- Endi simulyatorda ilovadan qanday foydalanmoqchi bo'lsangiz, shunday tugmalarni bosing va yozing (masalan ismni yozib, Sign Up tugmasini bosing).
- 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["..."]– OddiyTextlarni 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!