2010-06-14 26 views
9

Tôi đã xem xét một số khung công tác Mocking cho ASP.NET và xuất hiện trên Microsoft Moles. Điều này có vẻ là một phần của nhóm nghiên cứu của Microsoft và đã tự hỏi Nếu có ai ở đây đã chọn Moles trên các khuôn khổ Mocking trưởng thành khác như Moq.Tại sao tôi lại chọn Moles làm khung mocking?

Trả lời

15

Tôi thực sự sử dụng Moq Các nốt ruồi trong cùng một dự án thử nghiệm. Cả hai đều có điểm mạnh và tôi sử dụng mỗi nơi thích hợp. Nói chung, tôi sử dụng Moq cho loại thử nghiệm AAA tiêu chuẩn có xác minh và Moles là 'khẩu súng lớn' cho những thứ không thể bỏ qua khác, như gọi phương thức mở rộng, v.v.

Tôi thích sắp xếp này, vì mỗi thử nghiệm có thể đơn giản và hợp lý nhất có thể, mặc dù thiết lập chế nhạo có thể khác nhiều so với thử nghiệm để kiểm tra.

+2

+1 Điểm quan trọng mà cả hai có thể được sử dụng cùng nhau - bạn chỉ cần chọn 'mocker of first resort' một cách cẩn thận. –

+1

sẽ là tuyệt vời để xem ví dụ về điều này, bất kỳ bài đăng blog nào trên luồng công việc của bạn? Tôi thấy nó có một chút không tự nhiên đối với TDD tbh – roundcrisis

+1

Bạn đúng là nó xứng đáng là một ví dụ - tôi không có một ví dụ nào vào lúc này, nhưng tôi sẽ xem xét và xem liệu mã nào tôi có thể biến thành một. – ZeroBugBounce

3

Các nốt ruồi thường được so sánh/tương phản với TypeMock ở chỗ nó cung cấp một tập hợp các cơ sở bên ngoài điểm ngọt của Moq và/hoặc RhinoMocks.

Câu hỏi chính bạn phải tự hỏi mình trong việc lựa chọn là liệu bạn có muốn giữ cho thử nghiệm của mình tương đối công nghệ thấp hay tham gia vào cấp độ kỹ thuật cao hơn. Điều này phần lớn sẽ được quyết định bởi những gì bạn đang làm - bạn đã gắn thẻ ASP.NET chứ không phải MVC cho thấy nó thực sự có liên quan đến bạn.

Hãy xem this Dimecasts.net video để biết tổng quan tốt đẹp.

+0

Tôi đang sử dụng ASP.NET MVC. Tôi đã cập nhật các thẻ. – user300981

+0

@ bobsmith123: Trong trường hợp đó, cá nhân tôi sẽ không thấy một lý do để sử dụng một khuôn khổ mocking nặng hơn - Tôi muốn trì hoãn kéo trong pháo binh như vậy cho đến khi cần thiết. Sử dụng Pex là một quyết định riêng biệt mặc dù cần được thực hiện độc lập với sự lựa chọn của bạn về khuôn khổ mocking. Tại sao bạn gắn thẻ q với Pex và sau đó không đề cập đến nó - bạn có quan tâm đến việc sử dụng nó không? Bạn đang hỏi họ có phải bơ đậu phộng và thạch/bạn có tin rằng nó không thể tách rời khỏi nốt ruồi? –

5

Các nốt ruồi được thiết kế để hoạt động hiệu quả với phân tích hộp màu trắng của Pex. Tất cả các khuôn khổ giả khác thường phải chịu rất nhiều chi phí.

Vai trò cung cấp đề xuất giá trị đơn giản: thay thế bất kỳ phương thức .NET nào bằng đại biểu. Theo thiết kế, các nốt ruồi không cung cấp bất kỳ API nào để diễn tả 'xác minh' như các khung công tác khác thực hiện. Bạn thực sự quyết định liệu quyết định này có phù hợp với bạn hay không.

Nếu bạn cần xử lý mã (kế thừa) phụ thuộc vào các phương pháp tĩnh được mã hóa cứng hoặc các kiểu niêm kín với các hàm tạo nội bộ, các nốt ruồi có thể giúp bạn xử lý các trường hợp này.

Nếu bạn có giao diện và mã được mã hóa thành phần độc đáo, Moles cũng tạo ra các nhánh mỏng, tức là thực hiện giao diện, bạn có thể sử dụng với trình lược tả.

+0

+1 Nếu bạn muốn xem bao nhiêu lần một phương thức được gọi trong Moles, bạn phải đặt trong bộ đếm của riêng bạn và yêu cầu người được ủy quyền gọi phương thức ban đầu (nếu muốn). Tương phản với 'Times.Once' và các phương thức khác được cung cấp bởi một số khung công tác (như Moq). – Pat

Các vấn đề liên quan