Vì tôi không thực sự có kinh nghiệm trong thử nghiệm đơn vị, tôi đang cố gắng thu thập một số quy tắc mà tôi sẽ học trước tiên.
Hãy cẩn thận học "quy tắc" cho các vấn đề bạn chưa bao giờ gặp phải. Nếu bạn đi qua một số "quy tắc" hay "thực hành tốt nhất", tôi sẽ đề nghị tìm một ví dụ đồ chơi đơn giản về nơi quy định này là "giả" được sử dụng, và cố gắng giải quyết vấn đề mà bản thân , bỏ qua những gì các "quy tắc" cho biết.
Trong trường hợp này, bạn có thể cố gắng đưa ra 2 hoặc 3 lớp đơn giản và một số hành vi họ nên thực hiện. Thực hiện các lớp theo bất cứ cách nào cảm thấy tự nhiên và viết một bài kiểm tra đơn vị cho mỗi hành vi. Lập danh sách bất kỳ vấn đề nào bạn gặp phải, ví dụ nếu bạn bắt đầu với những thứ hoạt động theo một cách, sau đó phải quay lại và thay đổi nó sau; nếu bạn bối rối về cách mọi thứ được cho là phù hợp với nhau; nếu bạn cảm thấy khó chịu khi viết bản soạn sẵn; v.v.
Sau đó thử giải quyết vấn đề tương tự bằng cách làm theo "quy tắc". Một lần nữa, lập danh sách các vấn đề bạn gặp phải. So sánh các danh sách và suy nghĩ về tình huống nào có thể tốt hơn khi tuân theo quy tắc và tình huống nào có thể không.
Đối với câu hỏi thực tế của bạn, tôi có xu hướng ủng hộ cách tiếp cận cổng và bộ điều hợp , trong đó chúng tôi phân biệt giữa "logic cốt lõi" và "dịch vụ" (điều này tương tự như phân biệt giữa các chức năng thuần túy và quy trình hiệu quả).
Logic cốt lõi là tất cả về việc tính toán những thứ "bên trong" ứng dụng, dựa trên miền vấn đề. Nó có thể chứa các lớp học như User
, Document
, Order
, Invoice
, vv Nó của tốt để có lớp lõi gọi new
cho lớp lõi khác, vì họ đang chi tiết thực hiện "nội bộ". Ví dụ: tạo một Order
cũng có thể tạo Invoice
và Document
chi tiết những gì đã được đặt hàng. Không cần phải chế giễu những điều này trong các bài kiểm tra, bởi vì đây là những điều thực tế chúng tôi muốn kiểm tra!
Các cổng và bộ điều hợp là cách logic cốt lõi tương tác với thế giới bên ngoài. Đây là nơi mà mọi thứ như Database
, ConfigFile
, EmailSender
vv sống. Đây là những điều khiến việc kiểm tra trở nên khó khăn, vì vậy, nên tạo ra những thứ bên ngoài logic cốt lõi và chuyển chúng vào khi cần thiết (bằng cách tiêm phụ thuộc hoặc làm đối số phương thức, v.v.).
Bằng cách này, logic cốt lõi (là phần dành riêng cho ứng dụng, nơi logic kinh doanh quan trọng sống và chịu sự khuấy động nhất) có thể được kiểm tra một mình, mà không cần phải quan tâm đến cơ sở dữ liệu, tệp, email, v.v. Chúng ta chỉ có thể chuyển vào một số giá trị mẫu và kiểm tra xem chúng ta có nhận được các giá trị đầu ra đúng không.
Các cổng và bộ điều hợp có thể được kiểm tra riêng, sử dụng giả cho cơ sở dữ liệu, hệ thống tệp, v.v. mà không cần phải quan tâm đến logic nghiệp vụ. Chúng tôi chỉ có thể chuyển vào một số giá trị mẫu và đảm bảo rằng chúng đang được lưu trữ / đọc / gửi / v.v. thích hợp.