2009-05-31 33 views
16

Chạy mã này:Mocking một phương thức trả về một lớp niêm phong trong RhinoMocks

_foo = MockRepository.GenerateStub<IBar>(); 
_foo.Stub(x => x.Foo()).Return("sdf"); 

Khi

public interface IBar 
{ 
    string Foo(); 
} 

public class Bar : IBar 
{ 
    public string Foo() 
    { 
     throw new NotImplementedException(); 
    } 
} 

ném NotSupportedException - "Không thể tạo mocks của lớp niêm phong". Tôi hiểu lý do tại sao bạn không thể giả lập một lớp niêm phong (mặc dù có những giải pháp trong TypeMock), nhưng vấn đề với chế nhạo một lớp học mà trả về một lớp niêm phong (chuỗi) là gì?

+0

này nên làm việc như tôi giao diện thường giả mà có phương pháp trả lại chuỗi. Tôi nghi ngờ rằng bạn có một vấn đề khác. Chúng ta có thể xem thêm mã không? – tvanfosson

+0

Nó làm việc cho tôi bây giờ, không chắc chắn vấn đề là gì. – ripper234

+2

Tôi gặp vấn đề tương tự khi cố gắng gỡ lỗi. Chạy mà không gỡ lỗi hoạt động tốt. –

Trả lời

23

Rhino Mocks dường như đang bắt và xử lý ngoại lệ này. Bạn chỉ thấy nó trong trình gỡ lỗi VS.NET nếu bạn đã kích hoạt các ngoại lệ như các điểm ngắt. Có vẻ như bạn có thể tiếp tục chạy an toàn qua điểm ngắt ngoại lệ này và tất cả đều hoạt động như mong đợi.

+0

nhấn 'tiếp tục' thực hiện thủ thuật! – DanielV

1

Mã của bạn hoạt động bình thường. Bạn có thể có một số mã khác không được hiển thị đang gây ra sự cố. Đăng toàn bộ bài kiểm tra đơn vị của bạn tại đây và chúng tôi sẽ chẩn đoán vấn đề cho bạn.

1

Tôi có cùng một vấn đề, nó phải là một số VS studio gỡ lỗi cài đặt hoặc một số quyền truy cập không đủ cho tê giác mocks tôi đoán. Tôi khá chắc chắn rằng nó không phải là mã đang gây ra điều này.

2

Điều này xảy ra khi bạn KHÔNG có "Chỉ mã của tôi" được bật trong Tools-> Options-> Debugging-> General và bạn có ngoại lệ CLR, "Thrown" được chọn trong Debug-> Exceptions. Cách dễ nhất để khắc phục nó là kích hoạt "chỉ mã của tôi" trong Tools-> Options-> Debugging-> General.

enter image description here

0

Tôi thứ hai - Đó không phải là vấn đề với mã. Đây là cài đặt gỡ lỗi VS.

Tôi nhận được cùng một ngoại lệ trong khi gỡ lỗi trên mã bên dưới, trong khi cố gắng gửi Arg.Is.Anything làm tham số cho một nhánh.

mockPermissionManager.Stub(item => item.HasAccess(Arg<string>.Is.Anything)).Return(true); 

Trường hợp ngoại lệ được xử lý và mã/chế giễu công trình như mong đợi, chỉ cần làm F5

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