Cross-domain Testing
Chương trước, chúng ta đã học cách test bằng system-wide testing — mock ở tầng thấp nhất (network), để cả hệ thống chạy thật. Chương này mở rộng thêm: test sự phối hợp giữa nhiều domain.
1. Domain là gì?
Phần tiêu đề “1. Domain là gì?”Trong kiến trúc app, domain là một vùng logic nghiệp vụ riêng biệt. Ví dụ:
- Course domain: Xử lý khóa học, bài tập.
- Payment domain: Thanh toán, subscription.
- Authentication domain: Đăng nhập, session.
Mỗi domain có API, model, và logic riêng. Cross-domain testing kiểm tra chúng hoạt động đúng khi kết hợp với nhau.
2. Stable domain vs. Volatile domain
Phần tiêu đề “2. Stable domain vs. Volatile domain”Không phải domain nào cũng nên mock:
- Stable domain: Ít thay đổi, behavior ổn định → Dùng thật trong test.
- Volatile domain: Hay thay đổi, phụ thuộc external service → Mock khi cần.
Ví dụ:
Authentication(đăng nhập rồi lấy token) — khá stable → dùng thật.Payment(kết nối payment gateway ngoài) — volatile → mock.
3. Ví dụ: Test Course + Authentication
Phần tiêu đề “3. Ví dụ: Test Course + Authentication”CourseAPI cần user token từ AuthService để gọi API:
func testLoadCourseWithAuth() async { // Dùng AuthService thật (stable domain) let stubbedNetwork = StubbedNetwork(responses: [ "/auth/login": loginSuccessJSON, "/courses/123": courseJSON ]) let api = API(network: stubbedNetwork) let authService = AuthService(api: api) // Thật let courseAPI = CourseAPI(api: api, auth: authService) // Thật
// Login trước
// Load course — sử dụng token thật từ AuthService let course = try await courseAPI.loadCourse(id: "123")
XCTAssertEqual(course.tutor.name, "Caleb Davis")}Lợi ích:
- Test kiểm tra cả flow login → load course.
- Nếu
AuthServicethay đổi cách truyền token, test sẽ phát hiện lỗi ngay.
4. Khi nào nên mock một domain?
Phần tiêu đề “4. Khi nào nên mock một domain?”| Tình huống | Nên mock? |
|---|---|
| Domain ổn định, ít thay đổi | ❌ Dùng thật |
| Domain phụ thuộc external service | ✅ Mock |
| Domain rất chậm (heavy computation) | ✅ Mock |
| Domain có side-effect (gửi email, thanh toán) | ✅ Mock |
Nguyên tắc: Mặc định dùng thật, chỉ mock khi có lý do cụ thể.
5. Lợi ích so với test riêng từng domain
Phần tiêu đề “5. Lợi ích so với test riêng từng domain”- Test riêng: Mỗi domain pass test riêng → Nhưng khi kết hợp thì lỗi.
- Cross-domain test: Phát hiện lỗi ở điểm giao giữa các domain.
Kết luận: Cross-domain testing mở rộng system-wide test lên cấp domain. Dùng domain thật khi nó stable, mock khi nó volatile. Phát hiện lỗi integration sớm thay vì chờ lên production.