# Test Flow Và ViewModel

> Test state emissions mà không cần tap UI thủ công.

- URL: https://dantech.academy/courses/kotlin-accelerator/engineer-builder/05-testing-security-release/lesson-02-test-flows-and-viewmodels
- Khóa học: [Mobile Action Pro](https://dantech.academy/courses/kotlin-accelerator.md)
- Module: Testing, Security Và Release
- Thời lượng: 6 phút
- Độ khó: intermediate
- Truy cập: Dành cho học viên
- English: https://dantech.academy/en/courses/kotlin-accelerator/engineer-builder/05-testing-security-release/lesson-02-test-flows-and-viewmodels.md

## Mục tiêu

- Viết emission ledger: collector trước, trigger, drain virtual time, rồi mới assert
- Chọn StateFlow cho renderable state và SharedFlow cho one-time UI event
- Điều khiển Dispatchers.Main và QzDispatchers trong test để ViewModel test chạy được ở commonTest

## Nội dung bài học

1. Mục Tiêu Bài Học
2. Phần 1: Emission Ledger: StateFlow Hay SharedFlow?
3. Phần 2: Điều Khiển Clock Trong ViewModel Unit Tests
4. Phần 3: Một ViewModel Test Chạy Được Trên iOS
5. Phần 4: Test Sequence Hay Settled State Của ViewModel
6. Lộ Trình Đọc Code
7. Dấu Hiệu Cần Tránh
8. Tham Khảo
9. Ý Chính

## Học cùng AI agent

Toàn bộ bài học dành cho học viên của khóa. Học viên mở bài trên web và bấm nút **Markdown** để copy toàn bài, rồi dán vào Claude, ChatGPT, Cursor hoặc agent bạn đang dùng. Nhanh hơn: tạo token ở `/profile/ai-agents` và agent đọc bài trực tiếp qua MCP.

- [Đăng ký khóa học](https://dantech.academy/kotlin-accelerator/checkout)

---

- Bài trước: [Test Reducer Và Use Case](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/05-testing-security-release/lesson-01-test-reducers-and-use-cases.md)
- Bài tiếp theo: [Shrink Và Protect Android Release Build](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/05-testing-security-release/lesson-03-shrink-and-guard-release-build.md)
