Thuta Learning
ရှာဖွေရန်
AdvancedMobile Developmentintermediate

Testing iOS Apps (XCTest)

စိတ်လျှော့ပါ။ ဒီခန်းကို စာအုပ်လိုမဟုတ်ဘဲ စကားပြောသလိုပဲ၊ နားလည်လွယ်အောင် ရှင်းပါမယ်။

ဒီခန်းပြီးရင် ဘာတတ်သွားမလဲ

  • Testing iOS Apps (XCTest) ကို ကြောက်စရာမလိုအောင် နားလည်မယ်
  • ကိုယ်တိုင် Xcode/SwiftUI code ကို run ကြည့်တတ်မယ်
  • Real project ထဲမှာ ဒီ concept ကို ချက်ချင်း အသုံးချတတ်မယ်

ခဏလေး ဒီလိုပဲ စဉ်းစားကြည့်

Unit Test က function/class တစ်ခုချင်းစီ (ViewModel logic, data transformation) ကို UI/device မလိုအပ်ဘဲ test လုပ်ခြင်းပါ — XCTest framework (Xcode built-in) ကို သုံးပါတယ်, fast run ပြီး CI pipeline ထဲမှာ frequent run လုပ်လို့ရပါတယ်။ UI Test (XCUITest) ကတော့ actual UI interaction (button tap, text input) ကို Simulator ပေါ်မှာ automate test လုပ်ခြင်းပါ — `XCUIApplication` ကို သုံးပြီး 'button ကို tap ရင် text ပြောင်းလဲမလား' ဆိုတာမျိုးကို verify လုပ်နိုင်ပါတယ်.

လက်တွေ့ scenario နဲ့ ချိတ်ကြည့်မယ်

`TodoViewModel.addTodo()` ရဲ့ logic ကို unit test ရေးရင် `func testAddTodo_increasesListSize() { viewModel.addTodo(title: "Test"); XCTAssertEqual(viewModel.todos.count, 1) }` လို့ ရေးနိုင်ပါတယ် — UI test ကတော့ `app.buttons["Add"].tap(); XCTAssertTrue(app.staticTexts["Test"].exists)` ဆိုပြီး, button tap ပြီးရင် todo item screen ပေါ် ပေါ်လာမလား verify လုပ်နိုင်ပါတယ်.

အတူတူ ကြည့်မယ်

swift
// Unit test
import XCTest
@testable import MyApp

final class TodoViewModelTests: XCTestCase {
    func testAddTodo_increasesListSize() {
        let viewModel = TodoViewModel()
        viewModel.addTodo(title: "Buy milk")
        XCTAssertEqual(viewModel.todos.count, 1)
    }
}

// UI test
final class TodoAppUITests: XCTestCase {
    func testTappingAddButton_showsNewTodo() {
        let app = XCUIApplication()
        app.launch()
        app.buttons["Add"].tap()
        XCTAssertTrue(app.staticTexts["Buy milk"].exists)
    }
}
You should see
$ xcodebuild test
Test Suite 'All tests' passed — 2 tests, 0 failures

၅ မိနစ် စမ်းကြည့်

`TodoViewModel` ရဲ့ `addTodo()` function အတွက် unit test တစ်ခု ကိုယ်တိုင် ရေးကြည့်ပြီး, Xcode ရဲ့ 'Run Test' (◇ icon) button နဲ့ run ကြည့်ပါ။

သတိလေးတစ်ချက်

Test coverage 100% ကို target မထားပါနှင့် — critical business logic (payment, data integrity) ကို priority ပေးပြီး test ရေးသင့်ပါတယ်, UI detail (color, spacing) အတွက် test ကတော့ ROI နည်းတတ်ပါတယ်။

ဒီနေရာမှာ လူအများမှားတတ်တယ်

  • Test ကို 'code ရေးပြီးရင် နောက်မှ ရေးမယ်' ဆိုပြီး ဆက်ရွှေ့ထားခြင်း — feature တိုးလာတာနဲ့အမျှ manual re-test လုပ်ရတာ ပိုကြာလာပါလိမ့်မယ်
  • UI test ကို real network/database ပေါ်မှာ တိုက်ရိုက် run ခြင်း — test flaky (တစ်ခါအောင်၊ တစ်ခါကျ) ဖြစ်တတ်ပါတယ်, fake/mock dependency ကို သုံးသင့်ပါတယ်

အခု ကိုယ်တိုင် စမ်းကြည့်

`TodoViewModel` ရဲ့ `addTodo()` function အတွက် unit test တစ်ခု ကိုယ်တိုင် ရေးကြည့်ပြီး, Xcode ရဲ့ 'Run Test' (◇ icon) button နဲ့ run ကြည့်ပါ။

You'll know it worked when: $ xcodebuild test Test Suite 'All tests' passed — 2 tests, 0 failures

Testing iOS Apps (XCTest) | Thuta Learning