"Stub" là gì?


116

Vì vậy, tiếp tục với quyết tâm trong năm mới của mình để tham gia nhiều hơn vào TDD, tôi hiện đang bắt đầu làm việc nhiều hơn với Rhino Mocks .

Một điều tôi muốn làm là đảm bảo rằng tôi thực sự tìm hiểu về những gì tôi đang tham gia, vì vậy tôi muốn kiểm tra sự hiểu biết của mình về những gì tôi đã thấy cho đến nay (và tôi nghĩ sẽ rất tốt nếu đưa nó lên đây như một nguồn).

"Stub" là gì?


6
đầu tiên bạn đặt một câu hỏi, và sau đó bạn đưa ra câu trả lời?
empi

17
Như đã nêu trong câu hỏi - Tôi đang tìm cách xác minh sự hiểu biết của mình là đúng, tôi muốn câu trả lời ở đây (có thể là của tôi hoặc không) để cung cấp tài nguyên về câu hỏi được hỏi nhiều nhưng hiếm khi được trả lời tốt này: )
Rob Cooper

42
Ngoài ra, trả lời câu hỏi của chính những người đó được chỉ ra trong Câu hỏi thường gặp như một cách hợp lệ để sử dụng trang web - trên thực tế, điều này nên được khuyến khích.
Erik Forbes

Bạn có thể tự trả lời các câu hỏi của mình, mặc dù bản thân câu hỏi có hơi quá ồn ào (tự truyện) và không cho thấy nỗ lực tìm câu trả lời, không nghiêng về những gì người đó đã làm để cố gắng tìm ra câu trả lời.
eric

Câu trả lời:


112

Martin Fowler đã viết một bài báo xuất sắc về chủ đề này. Từ bài báo đó:

Meszaros sử dụng thuật ngữ Test Double làm thuật ngữ chung cho bất kỳ loại đối tượng giả vờ nào được sử dụng thay cho đối tượng thực cho mục đích thử nghiệm. Cái tên này xuất phát từ khái niệm về một đôi đóng thế trong phim. (Một trong những mục đích của anh ta là tránh sử dụng bất kỳ tên nào đã được sử dụng rộng rãi.) Sau đó, Meszaros định nghĩa bốn loại kép cụ thể:

  • Các đối tượng giả được chuyển đi xung quanh nhưng không bao giờ thực sự được sử dụng. Thông thường chúng chỉ được sử dụng để điền vào danh sách tham số.
  • Các đối tượng giả thực sự có các triển khai hoạt động, nhưng thường sử dụng một số phím tắt khiến chúng không phù hợp để sản xuất (một cơ sở dữ liệu trong bộ nhớ là một ví dụ điển hình).
  • Stubs cung cấp các câu trả lời soạn trước cho các cuộc gọi được thực hiện trong quá trình kiểm tra, thường không phản hồi bất kỳ điều gì bên ngoài những gì được lập trình cho bài kiểm tra. Stubs cũng có thể ghi lại thông tin về các cuộc gọi, chẳng hạn như cuống cổng email ghi nhớ các tin nhắn nó 'đã gửi' hoặc có thể chỉ có bao nhiêu tin nhắn mà nó 'đã gửi'.
  • Mocks là những gì chúng ta đang nói đến ở đây: các đối tượng được lập trình trước với các kỳ vọng tạo thành một đặc điểm kỹ thuật của các cuộc gọi mà chúng dự kiến ​​sẽ nhận được.

Nói theo cách của tôi: các đối tượng giả lập "mong đợi" một số phương pháp nhất định được gọi trên chúng và thường khiến bài kiểm tra đơn vị không thành công nếu kỳ vọng của chúng không được đáp ứng. Các đối tượng stub cung cấp các phản hồi soạn trước (và có thể được tự động tạo bởi các thư viện trợ giúp), nhưng thường không trực tiếp khiến kiểm thử đơn vị không thành công. Chúng thường chỉ được sử dụng để đối tượng bạn đang kiểm tra nhận được dữ liệu cần thiết để thực hiện công việc của mình.


2
Sau đó, sự khác biệt giữa các đồ vật giả và các kinh? Như bạn đã nói, chúng có cùng một vai trò được thực hiện, phải không?
LKM

4
@LKM một đối tượng giả là một đối tượng thực thực hiện chức năng thực và thực hiện mọi việc. Stubs chỉ là "câu trả lời đóng hộp" ví dụ. kết quả JSON được mã hóa cứng bắt chước những gì sẽ được trả về từ máy chủ web.
user3344977 13/02/17

31

"Sơ khai" là một triển khai của một giao diện tồn tại để cung cấp dữ liệu / một phản hồi nào đó. Ví dụ:

  • một DataSet
  • danh sách người dùng
  • một tệp Xml

Thông thường điều này sẽ được cung cấp bởi một dịch vụ khác (có thể là Dịch vụ Web, ứng dụng khác, cơ sở dữ liệu) nhưng để cải thiện khả năng kiểm tra của mã, kết quả được "giả mạo".

Một lợi ích chính của điều này là nó cho phép các xác nhận được thực hiện trong các thử nghiệm đơn vị dựa trên dữ liệu được mong đợi. Nếu lỗi phát sinh do lỗi dữ liệu, thì các bài kiểm tra có thể dễ dàng được thêm vào, tạo bản gốc mới (sao chép lỗi dữ liệu) và mã được tạo ra để sửa lỗi.

Stub khác với Mocks ở chỗ chúng được sử dụng để đại diện và kiểm tra trạng thái của một đối tượng, trong khi Mock kiểm tra sự tương tác của nó .


cảm ơn câu trả lời của bạn, nhưng tôi vẫn không hiểu: "triển khai một giao diện" ??
BKSpurgeon

6

Tôi tin rằng "sơ khai" đến từ STartUpBlock. nó được sử dụng để chỉ các phần mã được tạo tự động để giúp bạn, nhà phát triển, bắt đầu.


1
Tôi không nghĩ rằng điều này là chính xác. Nó có thể xuất phát từ thực tế này trong xây dựng nhà: hunker.com/12000314/what-is-a-stub-out
mattdm

3

"Sơ khai" hoặc "phương pháp sơ khai" được thiết kế để trở thành mã khởi động hoặc một sự thay thế tạm thời cho mã chưa được phát triển. Đó là mã tích hợp được tạo bởi IDE. Các phương thức stub thực sự là các phương thức được sử dụng để kiểm tra các phương pháp của một lớp cụ thể. Nó được sử dụng bằng cách nhập một số giá trị cho các biến cục bộ trong các phương pháp phát triển thực tế của bạn và kiểm tra xem đầu ra có đúng không. Điều quan trọng là tìm lỗi trong mã của bạn.


Câu trả lời này sẽ tốt hơn nếu được giải thích chi tiết hơn: mục đích của phương thức sơ khai là gì? Nó được sử dụng như thế nào? tại sao nó lại quan trọng?
Evan Weissburg

Cảm ơn! Tôi mới lập trình và mới bắt đầu học về Phát triển phần mềm. Cho đến nay đây là những gì tôi hiểu về các phương pháp sơ khai. Vì vậy tôi không thực sự chắc chắn về mục đích, tầm quan trọng và cách sử dụng của nó. Nhưng tôi nghĩ rằng các phương thức sơ khai thực sự là các phương thức được sử dụng để kiểm tra các phương pháp của một lớp cụ thể. Nó được sử dụng bằng cách nhập một số giá trị cho các biến cục bộ trong các phương pháp phát triển thực tế của bạn và kiểm tra xem đầu ra có đúng không. Điều quan trọng là phải tìm ra lỗi đối với mã của bạn. Nếu bạn có điều gì khác để bổ sung hoặc sửa chữa, vui lòng bình luận. Tôi hiện chỉ đang tìm hiểu về thử nghiệm.
Nasserr

1
Thật tuyệt khi bạn đang học! Bạn nên chỉnh sửa câu trả lời ban đầu của mình để người đọc sau này có thể dễ dàng học hỏi từ nó thay vì đăng trong phần bình luận. Ngoài ra - nếu bạn không chắc chắn về điều gì đó, tại sao bạn lại đăng một câu trả lời có thẩm quyền về điều đó?
Evan Weissburg

1
Điều đó tốt nếu bạn là người tự học - trên StackOverflow, bạn không cần phải đăng câu trả lời trừ khi bạn chắc chắn về chúng. Đây không phải là một diễn đàn tiêu chuẩn. Xem: stackoverflow.com/tour
Evan Weissburg

1
Cảm ơn bạn rất nhiều cho các hướng dẫn và đề xuất. Thực sự đánh giá cao nó!
Nasserr

3

Tôi đã đối mặt với câu hỏi gần đây và nhận ra rằng sự so sánh này giữa StubDriver thực sự rõ ràng và hữu ích:

Về cơ bản, khai báo và trình điều khiển là những thói quen không thực sự làm bất cứ điều gì ngoại trừ việc khai báo chính chúng và các tham số mà chúng chấp nhận. Phần còn lại của mã sau đó có thể lấy các tham số này và sử dụng chúng làm đầu vào.

+ --------- + ------------------------------- + ------- ------------------------ +
| | Cặc | Tài xế |
+ --------- + ------------------------------- + ------- ------------------------ +
| Loại | Mã giả | Mã giả |
+ --------- + ------------------------------- + ------- ------------------------ +
| Được sử dụng trong | Tích hợp từ trên xuống | Tích hợp từ dưới lên |
+ --------- + ------------------------------- + ------- ------------------------ +
| Mục đích | Để cho phép thử nghiệm trên | Để cho phép kiểm tra mức thấp hơn |
| | cấp độ của mã, khi | cấp độ của mã, khi |
| | cấp thấp hơn của mã là | cấp trên của mã là |
| | chưa phát triển. | chưa phát triển. |
+ --------- + ------------------------------- + ------- ------------------------ +
| Ví dụ | A và B là thành phần. | A và B là thành phần. |
| | A ---> B | A ---> B |
| | | |
| | A đã được phát triển. | A vẫn cần được phát triển. |
| | B vẫn cần được phát triển. | B đã được phát triển. |
| | Do đó, sơ khai được sử dụng | Do đó, trình điều khiển được sử dụng |
| | thay cho B để bắt chước nó. | thay cho A để bắt chước nó |
| | | |
| | A ---> Stub | Trình điều khiển ---> B |
+ --------- + ------------------------------- + ------- ------------------------ +

Từ sự khác biệt giữa Stub và Driver


0

Sau một số nghiên cứu và dựa trên các tệp sơ khai mà tôi đã gặp phải trong cuộc đời lập trình viên của mình, tôi sẽ nói rằng tệp sơ khai chỉ là một tệp chứa toàn bộ hoặc một phần quá trình triển khai của tệp. Nó giúp các nhà phát triển bắt đầu viết mã.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.