Mocking là gì?

Mocking là gì?
Các câu vấn đáp khác lý giải mocking là gì. Hãy để tôi dẫn bạn qua nó với một ví dụ. Và tin tôi đi, nó thực sự đơn thuần hơn bạn nghĩ rất nhiều .

tl; dr Đó là một lớp con của lớp gốc. Nó có dữ liệu khác được đưa vào để bạn tránh kiểm tra các phần được tiêm và chỉ tập trung vào kiểm tra phần còn lại của mã.

Giả sử bạn đang viết một ứng dụng iOS và có những cuộc gọi mạng. Công việc của bạn là kiểm tra ứng dụng của bạn. Để kiểm tra / xác lập xem những cuộc gọi mạng có hoạt động giải trí như mong đợi KHÔNG PHẢI LÀ TRÁCH NHIỆM CỦA BẠN. Đó là nghĩa vụ và trách nhiệm của một bên khác ( nhóm sever ) để kiểm tra nó. Bạn phải vô hiệu sự phụ thuộc vào ( mạng ) này và liên tục kiểm tra toàn bộ mã của bạn hoạt động giải trí xung quanh nó .

Một cuộc gọi mạng có thể trả về các mã trạng thái khác nhau 404, 500, 200, 303, v.v với phản hồi JSON.

Bạn đang đọc: Mocking là gì?

Ứng dụng của bạn được cho là hoạt động giải trí cho toàn bộ chúng ( trong trường hợp có lỗi, ứng dụng của bạn sẽ đưa ra lỗi dự kiến ). Những gì bạn làm với chính sách chế giễu là bạn tạo ra ‘ tưởng tượng, tựa như như những phản hồi mạng thực ‘ ( như mã 200 với tệp JSON ) và kiểm tra mã của bạn mà không ‘ thực thi cuộc gọi mạng thực và chờ phản hồi mạng của bạn ‘. Bạn mã hóa thủ công bằng tay / trả lại phản hồi mạng cho TẤT CẢ những loại phản hồi mạng và xem ứng dụng của bạn có hoạt động giải trí như bạn mong đợi không. ( bạn không khi nào giả định / kiểm tra 200 với những tài liệu không đúng mực, chính bới đó không phải là nghĩa vụ và trách nhiệm của bạn, nghĩa vụ và trách nhiệm của bạn là để kiểm tra của bạn ứng dụng với một đúng 200, hoặc trong trường hợp của một 400, 500, bạn kiểm tra nếu ứng dụng của bạn ném những lỗi bên phải )Điều này tạo ra trí tưởng tượng tương tự như như trong thực tiễn được gọi là chế nhạo .

Để thực hiện việc này, bạn không thể sử dụng mã gốc của mình (mã gốc của bạn không có phản hồi được chèn sẵn, phải không?). Bạn phải thêm một cái gì đó vào nó, tiêm / chèn dữ liệu giả đó thường không cần thiết (hoặc một phần của lớp học của bạn).

Vì vậy, bạn phân lớp lớp gốc và thêm bất cứ thứ gì (ở đây là HTTPResponse mạng, dữ liệu HOẶC trong trường hợp không thành công, bạn chuyển đúng errorString, HTTPResponse) bạn cần đến nó và sau đó ‘kiểm tra lớp con’, tức là lớp bị giả.
Bạn không còn kiểm tra lớp gốc. Lớp mô phỏng / lớp con được kiểm tra thay mặt cho lớp ban đầu

Câu chuyện dài, chế giễu là để đơn giản hóa và giới hạn những gì bạn đang kiểm tra và cũng khiến bạn nuôi những gì một lớp học phụ thuộc vào. Trong ví dụ này, bạn tránh kiểm tra các cuộc gọi mạng mình, và thay vào đó kiểm tra hay không ứng dụng của bạn hoạt động như bạn mong đợi với những kết quả tiêm / phản ứng – do chế giễu lớp

Không cần phải nói, bạn kiểm tra từng phản ứng mạng riêng không liên quan gì đến nhau .Bây giờ một câu hỏi mà tôi luôn có trong đầu là : Các hợp đồng / điểm kết thúc và về cơ bản là phản hồi JSON của những API của tôi được update liên tục. Làm thế nào tôi hoàn toàn có thể viết bài kiểm tra đơn vị chức năng mà xem xét điều này ?

Để giải thích rõ hơn về điều này: giả sử mô hình yêu cầu khóa / trường có tên username. Bạn kiểm tra điều này và bài kiểm tra của bạn vượt qua. 2 tuần sau, phụ trợ thay đổi tên của khóa thành id. Bài kiểm tra của bạn vẫn vượt qua. đúng? hay không?

Có phải là nghĩa vụ và trách nhiệm của nhà tăng trưởng phụ trợ để update những bản giả. Có nên là một phần trong thỏa thuận hợp tác của chúng tôi rằng họ cung ứng những bản nháp update ?Câu vấn đáp cho yếu tố trên là : kiểm tra đơn vị chức năng + quá trình tăng trưởng của bạn với tư cách là nhà tăng trưởng phía người mua sẽ / sẽ bắt được phản hồi giả định lỗi thời. Nếu bạn hỏi tôi như thế nào ? câu vấn đáp là :Ứng dụng thực tiễn của chúng tôi sẽ thất bại ( hoặc không thất bại nhưng không có hành vi mong ước ) nếu không sử dụng API update … do đó nếu thất bại … chúng tôi sẽ biến hóa mã tăng trưởng của mình. Điều này một lần nữa dẫn đến những thử nghiệm của chúng tôi thất bại …. mà chúng tôi sẽ phải sửa nó. ( Trên thực tiễn nếu tất cả chúng ta triển khai đúng quy trình tiến độ TDD, tất cả chúng ta sẽ không viết bất kể mã nào về trường trừ khi tất cả chúng ta viết thử nghiệm cho nó … và thấy nó thất bại và sau đó đi và viết mã tăng trưởng thực tiễn cho nó. )Tất cả điều này có nghĩa là phần phụ trợ không cần phải nói : đó là chúng tôi đã update những bản nháp … sau cuối nó cũng xảy ra trải qua việc tăng trưởng / gỡ lỗi mã của bạn. Bởi vì đó là một phần của quy trình tăng trưởng ! Mặc dù nếu phụ trợ cung ứng phản hồi giả cho bạn thì điều đó thuận tiện hơn .

Toàn bộ quan điểm của tôi về vấn đề này là (nếu bạn không thể tự động nhận được cập nhật phản ứng API chế giễu rồi) một số tương tác của con người là cần thiết tức là tay bản cập nhật của JSONs và có cuộc họp ngắn để đảm bảo giá trị của họ được cập nhật sẽ trở thành một phần của quá trình của bạn

Phần này được viết nhờ vào một cuộc tranh luận chậm trễ trong nhóm gặp gỡ của chúng tôi

Chỉ dành cho nhà phát triển iOS:

Một ví dụ rất hay về chế giễu là bài chuyện trò theo xu thế Giao thức trong thực tiễn này của Natasha Muraschev Chỉ cần bỏ lỡ đến phút 18 : 30 .Tôi thực sự thích phần này từ bảng điểm :

Bởi vì đây là thử nghiệm … chúng tôi muốn đảm bảo rằng getchức năng từ Gettableđược gọi, bởi vì nó có thể trở lại và về mặt lý thuyết, chức năng có thể gán một mảng các mặt hàng thực phẩm từ bất cứ đâu. Chúng ta cần đảm bảo rằng nó được gọi;

admin

Trả lời

Email của bạn sẽ không được hiển thị công khai.