Vì bạn nói rằng bạn chưa quen với thử nghiệm đơn vị và đã yêu cầu các đối tượng giả trong "điều khoản của giáo dân", tôi sẽ thử ví dụ của giáo dân.
Kiểm tra đơn vị
Hãy tưởng tượng thử nghiệm đơn vị cho hệ thống này:
cook <- waiter <- customer
Nhìn chung, thật dễ dàng để hình dung thử nghiệm một thành phần cấp thấp như cook
:
cook <- test driver
Trình điều khiển thử nghiệm chỉ cần đặt các món ăn khác nhau và xác minh đầu bếp trả lại món ăn chính xác cho mỗi đơn hàng.
Khó hơn để kiểm tra một thành phần trung gian, như người phục vụ, sử dụng hành vi của các thành phần khác. Một người kiểm tra ngây thơ có thể kiểm tra thành phần người phục vụ giống như cách chúng tôi đã kiểm tra thành phần nấu:
cook <- waiter <- test driver
Người lái thử sẽ gọi các món khác nhau và đảm bảo người phục vụ trả lại đúng món. Thật không may, điều đó có nghĩa là thử nghiệm này của thành phần bồi bàn có thể phụ thuộc vào hành vi chính xác của thành phần đầu bếp. Sự phụ thuộc này thậm chí còn tồi tệ hơn nếu thành phần đầu bếp có bất kỳ đặc điểm không thân thiện với thử nghiệm nào, như hành vi không xác định (thực đơn bao gồm sự ngạc nhiên của đầu bếp như một món ăn), rất nhiều sự phụ thuộc (đầu bếp sẽ không nấu mà không có toàn bộ nhân viên của anh ấy), hoặc rất nhiều tài nguyên (một số món ăn yêu cầu nguyên liệu đắt tiền hoặc mất một giờ để nấu ăn).
Vì đây là một bài kiểm tra bồi bàn, lý tưởng nhất, chúng tôi muốn kiểm tra chỉ người phục vụ, không phải người nấu ăn. Cụ thể, chúng tôi muốn đảm bảo người phục vụ truyền đạt yêu cầu của khách hàng đến đầu bếp một cách chính xác và giao thức ăn của đầu bếp cho khách hàng một cách chính xác.
Kiểm thử đơn vị có nghĩa là các đơn vị kiểm tra độc lập, do đó, cách tiếp cận tốt hơn là cách ly thành phần được kiểm tra (người phục vụ) bằng cách sử dụng cái mà Fowler gọi là kiểm tra nhân đôi (giả, cuống, giả, giả) .
-----------------------
| |
v |
test cook <- waiter <- test driver
Ở đây, đầu bếp thử nghiệm là "trong cahoots" với trình điều khiển thử nghiệm. Lý tưởng nhất là hệ thống được thử nghiệm được thiết kế sao cho đầu bếp thử nghiệm có thể dễ dàng thay thế ( được tiêm ) để làm việc với người phục vụ mà không thay đổi mã sản xuất (ví dụ: không thay đổi mã bồi bàn).
Đối tượng giả
Bây giờ, đầu bếp thử nghiệm (thử nghiệm kép) có thể được thực hiện theo nhiều cách khác nhau:
- một đầu bếp giả - một người giả vờ là một đầu bếp bằng cách sử dụng bữa tối đông lạnh và lò vi sóng,
- một đầu bếp còn sơ khai - một nhà cung cấp xúc xích luôn cung cấp cho bạn những con chó nóng bất kể bạn gọi món gì, hay
- một đầu bếp giả - một cảnh sát chìm theo kịch bản giả vờ là một đầu bếp trong một hoạt động chích.
Xem bài viết của Fowler để biết thêm chi tiết cụ thể về hàng giả và cuống so với giả và người giả , nhưng bây giờ, hãy tập trung vào một đầu bếp giả.
-----------------------
| |
v |
mock cook <- waiter <- test driver
Một phần lớn của đơn vị kiểm tra thành phần người phục vụ tập trung vào cách người phục vụ tương tác với thành phần nấu. Một cách tiếp cận dựa trên giả tập trung vào việc xác định đầy đủ những gì tương tác chính xác và phát hiện khi nó đi sai.
Đối tượng giả biết trước những gì sẽ xảy ra trong quá trình thử nghiệm (ví dụ: các cuộc gọi phương thức nào sẽ được gọi, v.v.) và đối tượng giả biết cách phản ứng của nó (ví dụ giá trị trả về sẽ cung cấp). Mock sẽ cho biết liệu những gì thực sự xảy ra khác với những gì được cho là xảy ra. Một đối tượng giả tùy chỉnh có thể được tạo từ đầu cho từng trường hợp thử nghiệm để thực hiện hành vi dự kiến cho trường hợp thử nghiệm đó, nhưng khung mô phỏng cố gắng cho phép một đặc tả hành vi như vậy được chỉ định rõ ràng và dễ dàng trực tiếp trong trường hợp thử nghiệm.
Cuộc trò chuyện xung quanh một bài kiểm tra dựa trên giả có thể như thế này:
kiểm tra trình điều khiển để chế nhạo nấu ăn : mong đợi một đơn đặt hàng hot dog và cung cấp cho anh ta con chó nóng giả này để đáp ứng
lái thử (giả làm khách hàng) để bồi bàn : Tôi muốn một con chó nóng xin
bồi bàn để nhạo báng nấu : 1 hot dog lòng
bếp giả để bồi bàn : Để lên: 1 hot dog sẵn sàng (cho hot dog giả để bồi bàn)
bồi bàn để lái thử : đây là hot dog của bạn (đưa hot dog giả để kiểm tra trình điều khiển)
lái thử : KIỂM TRA THÀNH CÔNG!
Nhưng vì người phục vụ của chúng tôi là người mới, đây là điều có thể xảy ra:
kiểm tra trình điều khiển để chế nhạo nấu ăn : mong đợi một đơn đặt hàng hot dog và cung cấp cho anh ta con chó nóng giả này để đáp ứng
lái xe thử nghiệm (đóng giả là khách hàng) cho người phục vụ : Tôi muốn một con chó nóng xin vui lòng
phục vụ để chế giễu nấu ăn : 1 hamburger xin vui lòng
mock cook dừng thử nghiệm: Tôi đã nói để mong đợi một đơn đặt hàng xúc xích!
trình điều khiển kiểm tra lưu ý vấn đề: KIỂM TRA FAILED! - người phục vụ thay đổi thứ tự
hoặc là
kiểm tra trình điều khiển để chế nhạo nấu ăn : mong đợi một đơn đặt hàng hot dog và cung cấp cho anh ta con chó nóng giả này để đáp ứng
lái thử (giả làm khách hàng) để bồi bàn : Tôi muốn một con chó nóng xin
bồi bàn để nhạo báng nấu : 1 hot dog lòng
bếp giả để bồi bàn : Để lên: 1 hot dog sẵn sàng (cho hot dog giả để bồi bàn)
bồi bàn để lái thử : đây là khoai tây chiên của bạn (cung cấp khoai tây chiên từ một số thứ tự khác để kiểm tra trình điều khiển)
lái xe kiểm tra ghi chú khoai tây chiên bất ngờ: TEST FAILED! Người phục vụ đã trả lại món ăn sai
Có thể khó thấy rõ sự khác biệt giữa các đối tượng giả và sơ khai mà không có ví dụ dựa trên gốc tương phản để đi với điều này, nhưng câu trả lời này đã quá lâu rồi :-)
Cũng lưu ý rằng đây là một ví dụ khá đơn giản và các khung mô phỏng cho phép một số thông số kỹ thuật khá phức tạp về hành vi dự kiến từ các thành phần để hỗ trợ các bài kiểm tra toàn diện. Có rất nhiều tài liệu về các đối tượng giả và khung mô phỏng để biết thêm thông tin.