ခဏလေး ဒီလိုပဲ စဉ်းစားကြည့်
Unit Test က function/class တစ်ခုချင်းစီ (ViewModel logic, data transformation) ကို UI/device မလိုအပ်ဘဲ test လုပ်ခြင်းပါ — JUnit framework ကို သုံးပါတယ်, fast run ပြီး CI pipeline ထဲမှာ frequent run လုပ်လို့ရပါတယ်။ UI Test (Compose Test) ကတော့ actual UI interaction (button click, text input) ကို emulator/device ပေါ်မှာ automate test လုပ်ခြင်းပါ — `composeTestRule` ကို သုံးပြီး 'button ကို click ရင် text ပြောင်းလဲမလား' ဆိုတာမျိုးကို verify လုပ်နိုင်ပါတယ်.
လက်တွေ့ scenario နဲ့ ချိတ်ကြည့်မယ်
`TodoViewModel.addTodo()` ရဲ့ logic ကို unit test ရေးရင် `@Test fun addTodo_increasesListSize() { viewModel.addTodo("Test"); assertEquals(1, viewModel.todos.size) }` လို့ ရေးနိုင်ပါတယ် — UI test ကတော့ `composeTestRule.onNodeWithText("Add").performClick(); composeTestRule.onNodeWithText("Test").assertIsDisplayed()` ဆိုပြီး, button click ပြီးရင် todo item screen ပေါ် ပေါ်လာမလား verify လုပ်နိုင်ပါတယ်.
အတူတူ ကြည့်မယ်
// Unit test
class TodoViewModelTest {
@Test
fun addTodo_increasesListSize() {
val viewModel = TodoViewModel(fakeDao)
viewModel.addTodo("Buy milk")
assertEquals(1, viewModel.todos.size)
}
}
// Compose UI test
class TodoScreenTest {
@get:Rule val composeTestRule = createComposeRule()
@Test
fun clickingAddButton_showsNewTodo() {
composeTestRule.setContent { TodoScreen() }
composeTestRule.onNodeWithText("Add").performClick()
composeTestRule.onNodeWithText("Buy milk").assertIsDisplayed()
}
}$ ./gradlew test
BUILD SUCCESSFUL — 2 tests passed၅ မိနစ် စမ်းကြည့်
`TodoViewModel` ရဲ့ `addTodo()` function အတွက် unit test တစ်ခု ကိုယ်တိုင် ရေးကြည့်ပြီး, Android Studio ရဲ့ 'Run Test' button နဲ့ run ကြည့်ပါ။
သတိလေးတစ်ချက်
Test coverage 100% ကို target မထားပါနှင့် — critical business logic (payment, data integrity) ကို priority ပေးပြီး test ရေးသင့်ပါတယ်, UI detail (color, spacing) အတွက် test ကတော့ ROI နည်းတတ်ပါတယ်။