2010-07-12 34 views
14

Tôi mới làm quen với điều này vì vậy tôi có thể hoàn toàn sai ở đây nhưng tôi tin rằng hầu hết các khuôn khổ mocking là phụ thuộc vào giao diện. Rất tiếc, hầu hết mã của chúng tôi không sử dụng giao diện. Bây giờ ngày hôm kia tôi đã thấy một khung Mocking trong Java sao chép mã byte của một đối tượng lớp \ để không gọi các phương thức nội bộ của nó nhưng bạn vẫn có thể kiểm tra xem nó đã gọi các phương thức này chưa.Không phụ thuộc vào Giao diện Mocking Framework cho C#

Câu hỏi của tôi là:. Net có bất kỳ khuôn khổ nhạo báng nào có thể làm điều tương tự không? Tôi đang tìm kiếm một cái gì đó miễn phí và tôi không muốn một cái gì đó đòi hỏi phương pháp để được ảo hoặc trừu tượng.

Trả lời

10

Microsoft Research đã phát triển Moles cho điều này, là một phần của Pex nhưng có thể được cài đặt độc lập. Và hoàn toàn miễn phí. Có một số introductory article (pdf) tốt trên trang web giải thích cách mô phỏng phương pháp tĩnh. Phải mất một thời gian trước khi họ nhận được những thứ bạn muốn (trang 16, Nhiệm vụ 3).

Herehere (Kênh 9), bạn có thể tìm thấy ví dụ về cách khai báo DateTime.Now. Sử dụng nốt ruồi, bạn có thể thử bất cứ điều gì bạn muốn.

+0

Có một chút xin lỗi muộn –

+0

Thật không may, có vẻ như phiên bản cuối cùng của Visual Studio nơi Moles được hỗ trợ là Visual Studio 2010. Trong Visual Studio 2012+, Moles được thay thế bằng "Microsoft Fakes", hiển nhiên yêu cầu một trong những SKU Visual Studio cấp doanh nghiệp. –

8

TypeMock Isolator có thể giả lập mọi lớp .NET, nhưng không miễn phí (hoặc rẻ, thậm chí). Tôi không chắc nó hoạt động như thế nào, nhưng nó đạt được kết quả cuối cùng.

Nhưng hầu hết các khung mocking không phụ thuộc hoàn toàn vào giao diện; họ cũng có thể xử lý các lớp cụ thể, mặc dù họ chỉ có thể ghi đè lên các phương thức ảo hoặc trừu tượng.

+0

quyền của bạn khi bạn nói rằng nó không rẻ $ 451.00 cho một giấy phép duy nhất –

+0

Cảm ơn bạn đã trả lời nhưng tôi cần một cái gì đó miễn phí và không phụ thuộc vào bất kỳ loại phương pháp trừu tượng ảo nào –

+1

tôi có thành công khá tốt trên moq dự án có kích thước. – Surya

6

Bạn có thể sử dụng các lớp thay vì giao diện với cả hai MoqRhino.Mocks, nhưng các phương thức giả phải là ảo. Câu trả lời của Mark Rushakoff về TypeMock là chính xác (+1).

Tùy chọn tốt nhất là cấu trúc lại mã hiện tại của bạn để kiểm tra (có thể mất thời gian). Tôi khuyên bạn nên đọc Working Effectively with Legacy Code bởi Michael Feathers.

+0

Cảm ơn bạn đã chỉ cho tôi hướng dẫn cuốn sách Tôi luôn luôn được đề nghị –

1

Rất nhiều khung công tác mô phỏng .NET sử dụng Castle Dynamic Proxy để tạo mocks khi chạy. Do đó giới hạn của chỉ cho phép giao diện/phương pháp ảo được chế giễu đến từ Castle và tôi nghĩ là bắt nguồn từ CLR. Cả hai MOQRhinoMocks đều có khả năng giả lập các phương thức ảo, điều này tốt bằng các phương pháp.

Cả hai lớp và giao diện có thể là proxy, tuy nhiên chỉ có thể chặn các thành viên ảo .

Lời khuyên của tôi là bắt đầu tạo cơ sở trừu tượng cho những lớp học cần được chế nhạo và lớp bê tông mở rộng nó. Sau đó, các cơ sở trừu tượng có thể được thông qua xung quanh và chế giễu. Nó thực sự là một bài tập tái cấu trúc không quá phức tạp.

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